【问题标题】:Azure NPM Issue: msnodesql Fails to deployAzure NPM 问题:msnodesql 无法部署
【发布时间】:2013-01-20 00:17:18
【问题描述】:

我正在尝试使用我的 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 中的数据库和网站位于不同区域时遇到了问题,但我更正了。

【问题讨论】:

    标签: node.js azure azure-sql-database


    【解决方案1】:

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

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

    我必须做的是 FTP 到我的天蓝色服务器并删除 /site/wwwroot/ 中除 web.config 之外的所有内容。您可能只需删除 node_modules 就可以侥幸逃脱,但由于这种行为出乎意料,我想清除所有内容。

    然后我进入本地机器上的 Node 项目目录,进入 node_module/msnodesql 目录并删除除 package.json 和 lib 目录之外的所有内容。在 lib 目录中,我为开发机器(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。

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

    【讨论】:

    • 谢谢!!!把我的头撞在墙上好几个小时。我没有 32/64 位兼容性问题,但我仍然遇到同样的错误。我清理了我的 node_modules/msnodesql 目录,只留下了 package.json、lib 目录和 build 目录,然后它终于工作了。
    • 清理 msnodesql 目录并清除除 wwwroot 中的 web.config 之外的所有内容!谢谢!
    • 正在进行大量工作来改进 Windows 的一般原生模块故事。它应该很快就会上街。对不起,你们遇到了这么多麻烦:-(
    【解决方案2】:

    失败的原因是它在部署时尝试构建本机模块。我们不支持在 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

    【讨论】:

    • 有道理。我想我以前走的是另一条路。我认为在 package.json 部分中没有它,但我一直在努力如何将它包含在我的环境中。很高兴知道这是要遵循的路线,很确定这会解决我的问题。
    • 我想我不能在我的 package.json 中配置任何东西。它仍然尝试在 NPM 中部署,尽管我没有将它包含在我的 package.json 中,而是在我的 node_modules 中为我的站点提供了 msnodesql 文件夹。
    • 这是我的 package.json:{ "name": "Lisn", "version": "0.1.0", "main": "./server.js", "dependencies": { "express": "*", "jade": "~0.22.0" }, "engines": { "node": ">=0.6.14" } }
    • 那行不通。这里最烦人的部分是 msnodesql 似乎是由 MS 团队创建的,尽管有所有 Azure 教程和指南,但它并没有与另一个 MS 项目一起工作......
    • 一年后这仍然是一个问题:/ 找到我自己一年前的评论并看到它从那以后没有进展,这有点令人失望。
    猜你喜欢
    • 1970-01-01
    • 2019-03-06
    • 2021-06-25
    • 2022-01-20
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    相关资源
    最近更新 更多