Azure NPM问题:msnodesql无法部署

我试图用我的Azure托pipe网站设置msnodesql(以前称为node-sqlserver),并遇到一些问题。

本质上,我正在Azure中发生部署失败。 我相信这是由于NPM试图在服务器上安装msnodesql的事实,但是会失败,因为它需要安装Python和C ++ 2010的“node-gyp”(它不存在于Azure端)。 这是我看到的错误消息

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节点,也只是使用预build的x86之一(build议由http://geekswithblogs.net/shaunxu/archive/2012/09/18/node.js-adventure—when-node .js-meets-windows-azure.aspx )。

任何其他build议,将不胜感激。

另外值得注意的是,它在我的本地环境中工作得很好,可以从我创build的SQL Azure数据库(使用在webmatrix中运行的msnodesql,但打到Azure SQL数据库之后,我已经将我的IP列入白名单)中获取数据。

我原本在DB和Azure在不同地区的网站有问题,但我纠正了这一点。

正如Glenn Block所提到的那样,这个问题源于Azure tyring在部署时构build本地模块。 这可能会发生几个原因,也许你没有上传二进制文件,也许这是错误的二进制文件,或者部署目录搞砸了。

Azure服务器需要Node .6的32位驱动程序。

我必须做的是FTP到我的azure色的服务器,并删除/ site / wwwroot / web.config除外。 你可能只是删除node_modules,但因为行为是意外的,我想清理一切。

然后,我进入我的本地计算机上的Node项目目录,进入node_module / msnodesql目录并删除了package.json和lib目录以外的所有内容。 在lib目录中,我为我的开发机器(64位.8)和azure色(分别称为64和32)创build了二进制文件的单独目录。

然后我修改,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。

我敢打赌,如果我在这方面付出一点努力,我可以很容易地将被删除的内容修剪到最低限度,但是在浪费了几个小时的时间来解决这个问题之后,我已经够了。

这是失败的原因是因为它正在尝试构build本地模块,当您部署。 我们不支持在Windows Azure网站中构build本地模块。 然而,你可以部署二进制文件,然后它将工作,但你不需要在你的package.json中。 关于这个post的更多细节: http : //blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-microsoft-driver-for-node-js-for-sql-server.aspx