【问题标题】:bcrypt not a valid win 32 application on azure app servicebcrypt 不是 azure 应用服务上的有效 win 32 应用程序
【发布时间】:2016-11-23 22:01:54
【问题描述】:

为了使用 Node 库 Sharp 进行一些图像处理,我必须将 Azure 应用服务上的节点可执行文件升级到 64 位。我通过手动下载可执行文件然后在IISNode.yml 中设置其路径来做到这一点。

不幸的是,当我启动应用程序时,它会抛出以下错误:

应用程序抛出未捕获的异常并终止: 错误:%1 不是有效的 Win32 应用程序。

\\?\D:\home\site\wwwroot\node_modules\bcrypt\build\Release\bcrypt_lib.node
    at Error (native)
    at Object.Module._extensions..node (module.js:597:18)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Function.cls_wrapMethod [as _load] (D:\home\site\wwwroot\node_modules\newrelic\lib\shimmer.js:256:38)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at bindings (D:\home\site\wwwroot\node_modules\bindings\bindings.js:76:44)
    at Object.<anonymous> (D:\home\site\wwwroot\node_modules\bcrypt\bcrypt.js:3:35)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Function.cls_wrapMethod [as _load] (D:\home\site\wwwroot\node_modules\newrelic\lib\shimmer.js:256:38)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (D:\home\site\wwwroot\node_modules\bookshelf-bcrypt\index.js:5:14)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)

我正在使用 Appveyor CI 系统构建和部署应用程序。这是我的appveyor.yml 文件的相关部分:

install:
  - ps: Install-Product node $env:nodejs_version x64
  - SET CL=-DDELAYIMP_INSECURE_WRITABLE_HOOKS
  - npm i --loglevel=warn
  - npm prune --production
  - 7z a api.zip * -x!test -x!db -x!.git -xr!.* -x!README.md -x!nodemon.json -x!appveyor.yml | FIND /V "ing  "

您会看到我正在使用 64 位版本的 Node 进行构建。

在我的 Azure 应用服务上,我将平台设置为 64 位。

我尝试过的事情:

  • 在 Azure 上将平台设置为 32 位
  • 在应用服务上吹走 node_modules/

提前致谢!

【问题讨论】:

    标签: node.js azure bcrypt appveyor


    【解决方案1】:

    Azure Web Apps 上的默认 node.js 执行应用程序都是 32 位的。所以它提出了你的问题。我们可以使用自定义的 node.js 运行时来满足您的要求。请尝试以下步骤:

    1,在你的应用程序中放置一个64位的node.exe执行应用程序,例如 在runtime 文件夹中。

    2、修改iisnode.yml,设置:

    nodeProcessCommandLine: "D:\home\site\wwwroot\runtime\node.exe"
    

    3、将整个应用程序部署到 Azure Web Apps。

    另外,您可以使用以下代码来验证node.js二进制文件是否为x64

    var http = require("http");
    
    http.createServer(function (request, response) {
        response.writeHead(200, { "Content-Type": "text/plain" });
        response.write(require('os').arch());
        response.end();
    
    }).listen(process.env.PORT);
    

    如果这不起作用,请告诉我。

    【讨论】:

    • 感谢您的快速回复!
    • iisnode.yml 在哪里?这是否仍然适用于 Azure Functions 的“beta 2”版本?
    • 我真的只需要在node.exe 上复制顶部而不需要别的吗?
    • Linux 容器怎么样? Linux版本的应用服务怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 2012-11-30
    • 2017-03-29
    • 2018-08-10
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多