Azure Web App WebJob不安装节点包

时间:2015-07-28 07:43:44

标签: node.js azure azure-webjobs

我正在尝试使用nodejs创建一个webjob,脚本使用各种节点模块,但是当作业运行时,它似乎不会预先安装这些包。

我上传的zip文件包含一个包含所有依赖项的package.json和一个zip根目录下的server.js,脚本执行但是根据下面的日志找不到要运行的模块。 / p>

我在日志中收到以下输出。

[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

4 个答案:

答案 0 :(得分:6)

执行此操作的最佳方法似乎是将node_modules手动压缩到正确的文件夹中。根据{{​​3}}

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

通过ftp将节点模块上传到以下文件夹

  • /站点/ wwwroot的/ node_modules

https://github.com/projectkudu/kudu/wiki/Web-jobs#copying-files-directly-in-their-proper-location

答案 1 :(得分:2)

您不必上传节点模块。这违背了简单的git推送的目的。并且您不希望在git仓库中包含节点模块。

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

App_Data \ jobs \ continuous \ [jobname]

此文件夹中的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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您的git repo应该没有node_modules。

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

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

Webjobs按优先级自动搜索可执行文件:com,bat和exe排在最前面,列表中的后面是js。看到这个:https://docs.microsoft.com/en-us/azure/app-service/webjobs-create#acceptablefiles