bcrypt在azure应用程序服务上不是有效的win 32应用程序

jdi*_*n04 2 azure bcrypt node.js appveyor

为了使用Sharp的Node库进行一些图像处理,我必须将Azure App Service上的node可执行文件升级到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)
Run Code Online (Sandbox Code Playgroud)

我正在使用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  "
Run Code Online (Sandbox Code Playgroud)

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

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

我尝试过的事情:

  • 在Azure上将平台设置为32位
  • 在App Service上吹走node_modules /

提前致谢!

Aar*_*hen 5

Azure Web Apps上的默认node.js执行应用程序全部为32位。因此,这引发了您的问题。我们可以使用定制的node.js运行时来满足您的需求。请尝试以下步骤:

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

2,修改iisnode.yml,设置:

nodeProcessCommandLine: "D:\home\site\wwwroot\runtime\node.exe"
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

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