2013-01-20 66 views
6

我想使用我的Azure托管站点设置msnodesql(以前称为node-sqlserver),并且遇到了一些问题。Azure NPM问题:msnodesql无法部署

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

npm ERR! [email protected] install: `node-gyp rebuild` 
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1 
npm ERR! 
npm ERR! Failed at the [email protected] 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内但运行Azure SQL数据库的msnodesql从我创建的SQL Azure数据库中获取数据(一旦我将IP列入白名单)。

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

回答

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

+0

有道理。我想我以前是在走另一条路线。我觉得没有在package.json部分中,但我想如何让它包含在我的环境中。很高兴知道这是遵循的路线,非常确定这将解决我的问题。 –

+0

我想我不能在我的package.json中配置一些东西。它仍然尝试在NPM中进行部署,但是我没有将它包含在我的package.json中,而只是在我的node_modules中为我的站点提供了msnodesql文件夹。 –

+0

这是我的package.json:'{ “名”: “LISN”, “版本”: “0.1.0”, “主”: “./server.js”, “依赖”:{ “表达“: ”*“, ”玉“: ”〜0.22.0“ }, ”引擎“:{ ”节点“: ”> = 0.6.14“ } }' –

5

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

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

我只需要将FTP导入我的天蓝色服务器,并删除/ site/wwwroot/web.config中的所有内容。你可能会删除node_modules,但因为行为是意外的,我想清除所有的东西。

然后,我进入我的本地计算机上的Node项目目录,并进入node_module/msnodesql目录并删除了package.json和lib目录以外的所有内容。在lib目录中,我为我的开发机器(64位.8)和天蓝色(分别称为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。

我敢打赌,如果我为此付出一点努力,我可以很容易地修剪被删除的内容到最低限度,但是在浪费数小时解决此问题后,我已经足够了。

+0

谢谢!在这一个上,我的头靠在墙上几个小时。我没有32/64位兼容性问题,但我仍然有同样的错误。我清理掉了我的node_modules/msnodesql目录,只留下了package.json,lib目录和build目录,然后它终于起作用了。 –

+0

清理msnodesql目录并吹走wwwroot中除web.config以外的所有内容!谢谢! –

+0

有很多工作正在改进Windows的本地模块故事。它应该很快就会撞上街头。对不起,你们有这么多麻烦:-( –