我正在尝试使用我的Azure托管网站设置msnodesql(以前称为node-sqlserver),并且遇到了一些问题。
基本上我在Azure中部署失败。我相信这是因为NPM正在尝试在服务器上安装msnodesql,但是会失败,因为它需要安装“node-gyp”,安装Python和C ++ 2010(这在天蓝色的一面不存在)。这是我看到的错误消息
npm ERR! msnodesql@0.2.0 install: `node-gyp rebuild`
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1
npm ERR!
npm ERR! Failed at the msnodesql@0.2.0 install script.
npm ERR! This is most likely a problem with the msnodesql package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls msnodesql
npm ERR! There is likely additional logging output above.
我一直在攻击这个错误一段时间,似乎没有什么能解决它。我得到的最好答案是在node_modules中手动包含msnodesql(由http://geekswithblogs.net/shaunxu/archive/2012/11/16/install-npm-packages-automatically-for-node.js-on-windows-azure-web.aspx指定)。我觉得应该解决它,但唉不是。我也尝试针对本地x86节点进行编译,并且还使用预构建的x86节点(由http://geekswithblogs.net/shaunxu/archive/2012/09/18/node.js-adventure---when-node.js-meets-windows-azure.aspx建议)。
这里有任何其他建议。
另外值得注意的是,它在我的本地环境中运行得很好,并且可以使用在webmatrix中运行的msnodesql从我创建的SQL Azure数据库中获取数据(一旦我将我的IP列入白名单),但是可以访问Azure SQL DB。
我最初的问题是数据库和Azure中的网站位于不同的地区,但我更正了。
答案 0 :(得分:5)
正如Glenn Block所说,问题源于Azure部署在部署时构建本机模块。这可能是由于一些原因造成的,也许你没有上传二进制文件,可能是错误的二进制文件,或者部署目录可能搞砸了。
Azure服务器需要Node .6的32位驱动程序。
我需要做的是将FTP放入我的azure服务器并删除/ site / wwwroot /中除web.config之外的所有内容。您可能只是删除node_modules,但由于行为是意外的,我想清除所有内容。
然后我进入我本地机器上的Node项目目录,进入node_module / msnodesql目录并删除了除package.json和lib目录之外的所有内容。在lib目录中,我为dev机器(64位.8)和azure分别创建了二进制目录,分别为64和32。
然后我修改了sqlserver.native.js如下
try {
module.exports = require('./32/sqlserver.node'); //Azure version
}
catch (e) {
try {
module.exports = require('./64/sqlserver.node'); //My local machine
}
catch (e) {
try {
module.exports = require('../build/Release/sqlserver.node');
}
catch (e) {
console.error('Native sqlserver module not found. Did you remember to run node-gyp configure build?');
throw e;
}
}
}
要做的重点是,我们尝试加载所有可用版本以适应我可能具有的每种部署可能性,但优先考虑Azure服务器。在我的本地开发机器上,我们无法从/ 32加载节点,因为格式错误,我们回到/ 64.
我敢打赌,如果我付出一点努力,我可以很容易地将被删除的内容减少到最低限度,但是在浪费了几个小时来解决这个问题之后,我已经受够了。
答案 1 :(得分:0)
失败的原因是它在部署时尝试构建本机模块。我们不支持在Windows Azure网站中构建构建本机模块。但是你可以部署二进制文件然后它可以工作,但你需要在package.json中没有它。请按照此帖了解详情:http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-microsoft-driver-for-node-js-for-sql-server.aspx