将Heroku Scheduler与Node.js一起使用

Ali*_*Ali 49 scheduler heroku node.js

实际上没有关于在Node.js中使用Heroku Scheduler的教程.假设我有一个名为sayHello()的函数,我想每10分钟运行一次.我怎样才能在控制器中使用它.在ruby中你写了rake function_name()但是没有解释Node.我可以写'/ sayHello'或者我应该做额外的配置吗?

小智 82

创建文件<project_root>/bin/say_hello:

#! /app/bin/node
function sayHello() {
  console.log('Hello');
}
sayHello();
process.exit();
Run Code Online (Sandbox Code Playgroud)

部署到Heroku并测试它,$ heroku run say_hello然后将其添加到具有任务名称的调度程序say_hello.

说明

say_hello.js您通常使用的Node.js脚本为例$ node say_hello.js.

把它变成一个脚本

  1. 删除.js结尾
  2. 在顶部插入'shebang':#! /app/bin/node[1] [2]
  3. 把它移到bin目录[3]

[1]阅读维基百科上shebang.
[2] node可执行文件安装在app/bin/nodeHeroku上.您可以通过登录Heroku上的bash $ heroku run bash然后询问来查看它$ which node.
[3] Heroku要求将脚本放在bin目录中.请参阅Heroku开发人员中心中的定义任务.

我同意用于调度任务的Heroku文档对于Ruby脚本以外的任何内容都不是很清楚.经过一些试验和错误,我设法解决了这个问题.我希望这有帮助.

  • 在我的情况下,询问heroku bash中的`$ which节点`给了我`/ app/.heroku/node/bin/node`作为节点的路径.我输入的是app/bin/node,它完美无缺.感谢您详细的演练和注释[2]. (4认同)
  • 很棒的答案!什么是exit()方法(我试过这个例子并收到一个未定义错误的方法)? (2认同)
  • 我使用`#!/ usr/bin/env node`而不是`#!/应用/斌/ node`. (2认同)

Chr*_*dal 39

更好的方法是定义您的计划文件,例如worker.js使用以下内容:

function sayHello() {
    console.log('Hello');
}
sayHello();
Run Code Online (Sandbox Code Playgroud)

然后在heroku时间表中,你node worker就像你在Procfile那里定义它一样写出来!


Cla*_*fou 23

Christophe的答案对我有用,直到我需要将参数传递给脚本,此时它失败了.问题是node不应该在任务中指定.以下是如何使其正常工作:

  1. 在Procfile中,为脚本定义进程类型.请参阅下面的典型Procfile与Web进程,并且,对于运行"scheduled_job.js",第二个进程类型富有想象力地命名为"worker".

    web: node app.js
    worker: node scheduled_job.js
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在Heroku调度程序的"任务"列中,只需输入带或不带参数的进程类型名称(本例中为"worker").不要在它之前输入'node'.Heroku在它前面显示一个美元符号,因此有效设置的示例将是$ worker(不带参数运行)或$ worker 123 abc(执行带参数"123"和"abc"的scheduled_job.js)


Sim*_*zen 7

我很困惑没有人尝试过:

$ heroku run node yourScript.js
Run Code Online (Sandbox Code Playgroud)

所以把它放在 Heroku Scheduler 中

node yourScript.js
Run Code Online (Sandbox Code Playgroud)

为我工作。

PS:请确保import您的脚本需要的一切。


陳見綸*_*陳見綸 5

以下步骤适用于我的情况。

  1. 在根文件夹中添加worker.js文件。
  2. 在 worker.js 中。写一个简单的函数,就像上面一样。 function sayHello() { console.log('Hello'); } sayHello();
  3. 转到 heroku Scheduler 附加组件。单击“添加新工作”并在字段中输入“工人”。然后设置时间间隔并单击保存。

这里有一些应该注意的

  1. 更新后工作设置。如果使用上面的例子,你可以heroku run node worker.js用来检查它是否工作。它应该在您的终端中显示“你好”。
  2. 我的 node.js 项目使用express-babel启动器。