2016-11-23 43 views
2

爲了使用節點庫Sharp做一些圖像處理,我必須將Azure App Service上的可執行節點升級到64位。我通過手動下載可執行文件然後在IISNode.yml中設置其路徑來完成此操作。bcrypt在azure應用程序服務上不是有效的win 32應用程序

不幸的是,當我啓動應用程序,它引發以下錯誤:

應用已經拋出未捕獲的異常而終止: 錯誤:%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位版本的構建。

在我的Azure應用服務上,我將平臺設置爲64位。

事情我已經嘗試:

  • 平臺設置爲32位在Azure上
  • 吹走node_modules /在App服務

提前感謝!

回答

3

Azure Web應用程序上的默認node.js執行應用程序都在32位。所以它引發了你的問題。我們可以使用自定義node.js運行時來實現您的要求。請嘗試以下步驟:

1,在您的應用程序中放置一個64位node.exe執行應用程序,例如, 在runtime文件夾中。

2,修改iisnode.yml,設置:

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

3,部署整個應用程序到Azure的Web應用程序。

此外,您可以使用以下代碼來驗證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); 

請讓我知道這是行不通的。

+0

感謝您的快速回復! – jdixon04

相關問題