6

我正在尝试使用我的 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.

我已经对这个错误进行了一段时间的修改,但似乎没有任何东西可以解决它。我得到的最佳答案是手动将 msnodesql 包含在 node_modules 中(由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 DB 的 msnodesql 从我创建的 SQL Azure DB 中获取数据(一旦我将我的 IP 列入白名单)。

我最初在 Azure 中的数据库和网站位于不同区域时遇到问题,但我更正了这一点。

4

2 回答 2

5

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

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

我必须做的是通过 FTP 进入我的 azure 服务器并删除 /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。

我敢打赌,如果我为此付出一点努力,我可以轻松地将被删除的内容缩减到最低限度,但是在浪费了数小时解决这个问题之后,我已经受够了。

于 2013-02-08T14:51:10.153 回答
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

于 2013-01-20T00:35:07.667 回答