Azure Web App WebJob 未安装节点包

Azure Web App WebJob not installing node packages

我正在尝试使用 nodejs 创建一个网络作业,脚本使用各种节点模块,但是当作业 运行s 时它似乎没有预先安装包。

我上传的 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

WebJobs 不会 运行 npm 在执行脚本之前,因此请确保在上传时包含您的应用程序所依赖的模块,例如在您通过门户上传的 zip 文件中包含 node_modules

执行此操作的最佳方法似乎是手动 ftp 将 node_modules 上传到正确的文件夹中。根据 https://github.com/projectkudu/kudu/wiki/Web-jobs#copying-files-directly-in-their-proper-location

我所做的是创建没有 node_modules 文件夹的 webjob,然后 ftp 单独创建文件。

通过ftp

将您的节点模块上传到以下文件夹
  • /site/wwwroot/node_modules

您不必上传节点模块。这违背了简单 git 推送的目的。而且您也不想在 git 存储库中包含节点模块。

"secret" 是将节点模块依赖项添加到您的主项目 package.json,然后将您的 Web 作业添加到具有以下结构的基础项目文件夹中:

App_Data\jobs\continuous\[工作名称]

此文件夹中的 Web 作业不需要 package.json 或节点模块,因为它使用主项目 package.json 中指定的模块。它的主文件应该叫做"run.js".

我今天才发现这个,很遗憾,您必须在整个 Internet 上进行挖掘才能了解到您不必手动将 Web 作业上传到 Azure 门户。微软,请为使用 node.js 的人添加此类内容的文档。 Azure 是一个很棒的平台!但是由于这样的事情,node.js 进入 Azure 的门槛很高。

有关详细信息,请参阅这篇有用的文章:

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

您的 git 存储库不应包含 node_modules。

您的构建应该 npm 安装它们,然后将它们包含在要部署的包中(在编译的世界中,node_modules 将是 C# 或 C++ 需要 运行 的所有 dll,因此它们是您部署的一部分)。

另一方面,您应该插入间接而不是 运行 "node index.js" 自己。一个好的做法是包含一个 run.bat,里面包含 "node index.js"。这样你就可以控制正在做什么。

Webjobs自动搜索可执行文件的顺序是:com、bat、exe在前,js在后。看到这个:https://docs.microsoft.com/en-us/azure/app-service/webjobs-create#acceptablefiles