2015-07-28 54 views
4

我嘗試使用nodejs創建一個webjob,腳本使用各種節點模塊,但是當作業運行時,它似乎未預先安裝程序包。Azure Web App WebJob未安裝節點程序包

我上傳的zip文件包含一個package.json,其中包含所有的依賴關係和一個server.js,zip腳本被執行,但是根據下面的日誌,它找不到要運行的模塊。

我在日誌中獲得以下輸出。

[07/28/2015 07:36:14 > 5fabb6: SYS INFO] Status changed to Initializing 
[07/28/2015 07:36:14 > 5fabb6: SYS INFO] Run script 'server.js' with script host - 'NodeScriptHost' 
[07/28/2015 07:36:14 > 5fabb6: SYS INFO] Status changed to Running 
[07/28/2015 07:36:15 > 5fabb6: ERR ] 
[07/28/2015 07:36:15 > 5fabb6: ERR ] module.js:340 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  throw err; 
[07/28/2015 07:36:15 > 5fabb6: ERR ]   ^
[07/28/2015 07:36:15 > 5fabb6: ERR ] Error: Cannot find module 'sendgrid' 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  at Function.Module._resolveFilename (module.js:338:15) 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  at Function.Module._load (module.js:280:25) 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  at Module.require (module.js:364:17) 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  at require (module.js:380:17) 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  at Object.<anonymous> (D:\home\site\wwwroot\App_Data\jobs\triggered\TestWebJob\dist\services\email.service.js:4:16) 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  at Module._compile (module.js:456:26) 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  at Object.Module._extensions..js (module.js:474:10) 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  at Module.load (module.js:356:32) 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  at Function.Module._load (module.js:312:12) 
[07/28/2015 07:36:15 > 5fabb6: ERR ]  at Module.require (module.js:364:17) 
[07/28/2015 07:36:15 > 5fabb6: SYS INFO] Status changed to Failed 
[07/28/2015 07:36:15 > 5fabb6: SYS ERR ] Job failed due to exit code 8 
+0

我要補充我也試過,包括在zip文件中的node_modules但這甚至未能上傳,拉鍊低於100MB大小限制。我相信這可能是由於新的文件。 – JohnC

回答

4

執行此操作的最佳方式似乎是手動將node_modules ftping到正確的文件夾中。按照https://github.com/projectkudu/kudu/wiki/Web-jobs#copying-files-directly-in-their-proper-location

我所做的是創建沒有node_modules文件夾的webjob,然後單獨ftp上的文件。

通過FTP上傳您的節點模塊到以下文件夾

  • /網站/ wwwroot文件/ node_modules

ftp view of azure node website

+1

您還可以使用Visual Studio Online控制檯(或Kudu控制檯)來輸入Web作業的目錄並運行'npm install --production'。這也會安裝你所有的依賴關係。你只需要記住將你的package.json包含在.zip文件存檔中。 –

+0

我之前也在做「上傳拉鍊」的方式。看看下面的答案,希望它有幫助。 :) – Sam

1

WebJobs將不會運行npm在執行該腳本前,所以一定要包含您的應用程序依賴於上傳,例如模塊在通過門戶上傳的zip文件中包含node_modules

+0

我也試過這個,但它沒有正確上傳,即使zip大大低於100mb的文件大小。 – JohnC

+0

zip文件是11meg,唯一的區別是新的還包括node_modules https://www.dropbox.com/s/jqmif05catz1szh/Screenshot%202015-07-28%2010.07.23.png?dl=0 – JohnC

0

你不應該上傳節點模塊。這打破了簡單的git推動的目的。而且你不想在你的git repo中包含節點模塊。

的「祕密」是節點模塊依賴關係添加到您的主項目的package.json,然後用這個結構中添加你的web作業到你的基地項目文件夾:

的App_Data \ \工作連續\ [作業名]

此文件夾中的Web作業不需要package.json或節點模塊,因爲它使用了主項目package.json中指定的模塊。其主文件應該被稱爲「run.js」。

我剛剛發現了這一點,很遺憾您必須深入瞭解整個互聯網,然後才瞭解到您不必手動將Web作業上傳到Azure門戶。微軟,請爲使用node.js的人添加這些類型的文檔。 Azure是一個很棒的平臺!但是由於類似這樣的事情,使用node.js進入Azure的障礙很大。

詳情請參見本有用的文章:

http://blog.amitapple.com/post/74215124623/deploy-azure-webjobs/#.V6JkF7grKUl