Node.js 使用 Heroku Scheduler 的应用程序存在 Shebang 行问题

Node.js application with Heroku Scheduler having a Shebang line issue

我正在尝试将一个小型 Node.js 应用程序部署到 Heroku,然后让 Heroku Scheduler 运行 每 10 分钟应用程序一次。构建此应用程序的客户前供应商也将其托管在 Heroku 上,因此无需更改我收到的源代码中的任何内容。尽管如此,我还是从 Heroku 日志中收到以下错误。

2018-05-09T07:26:07.710882+00:00 app[api]: Starting process with command `fetch` by user scheduler@addons.heroku.com
2018-05-09T07:26:11.124833+00:00 heroku[scheduler.2653]: Starting process with command `fetch`
2018-05-09T07:26:11.718182+00:00 heroku[scheduler.2653]: State changed from starting to up
2018-05-09T07:26:13.647479+00:00 heroku[scheduler.2653]: State changed from up to complete
2018-05-09T07:26:13.629258+00:00 heroku[scheduler.2653]: Process exited with status 126
2018-05-09T07:26:13.542885+00:00 app[scheduler.2653]: bash: /app/bin/fetch: /usr/local/bin/node: bad interpreter: No such file or directory

显然我的 fetch 文件中的 'Shebang' 行有问题,运行 我的 index.js 文件:

#!/usr/local/bin/node
var path = require('path');
require(path.join(__dirname, '../index')).start();

我对 Node.js 和 Javascript 比较陌生,所以我不确定我是否完全理解 'Shebang' 行的用途。但我猜它指向错误的位置或类似的东西?我如何弄清楚这一行要更改什么?

您的 "fetch" 文件中不需要任何 "shebang" 行。 我建议您只需删除 #!/usr/local/bin/node 行,并将以下内容指定为您的 Heroku Scheduler 命令:

node <path_to_fetch.js>

这应该让 heroku scheduler 在您应用的 one-off dyno, provided you have a node.js buildpack 中启动您的 node.js 应用。

使用说明 here 检查您的应用中是否有 node.js buildpack,并在必要时添加它。

就是说,如果您真的想 运行 您的应用带有 "shebang",请将其更改为 #!/usr/bin/env node。在这种情况下,请在您的 Heroku 调度程序命令中省略单词 node

Shebang 行告诉 运行 文件使用哪个解释器。您收到的错误表明节点未安装在 shebang 指向的位置。使用 #!/usr/bin/env node 通常有效。