使用Heroku调度程序与Node.js

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

创build文件<project_root>/bin/say_hello

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

部署到Heroku并用$ heroku run say_hello然后将其添加到任务名称为say_hello的调度程序中。

说明

say_hello.js作为Node.js脚本的示例,通常使用$ node say_hello.js运行。

把它变成一个脚本

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

[1]阅读维基百科上的shebang 。
[2] node可执行文件安装在Heroku的app/bin/node中。 你可以通过login到Heroku上的bash来检查出来,用$ heroku run bash然后询问$ which node
[3] Heroku要求将脚本放在bin目录中。 请参阅Heroku Dev Center中的定义任务 。

我同意,除了Ruby脚本以外,其他任何计划任务的Heroku文档都不是很清楚。 经过一些试验和错误,我设法解决了这个问题。 我希望这有帮助。

更好的方法是定义调度文件,例如worker.js其中包含以下内容:

 function sayHello() { console.log('Hello'); } sayHello(); 

然后在heroku时间表中,你只需要像在Procfile定义的那样写node worker就可以了!

克里斯托夫的答案为我工作,直到我需要传递一个参数的脚本,在这一点上失败。 问题是该node不应该在任务中指定。 下面是如何得到它的工作:

  1. 在您的Procfile中,为您的脚本定义一个stream程types。 请参阅下面的一个典型的Procfile与Web进程,并运行“scheduled_job.js”,第二个过程types富有想象力地命名为“工人”。

     web: node app.js worker: node scheduled_job.js 
  2. 在Heroku调度程序的“任务”列中,只需input具有或不具有参数的过程types(在本例中为“worker”)的名称。 不要在它之前input“节点” 。 Heroku在它前面显示一个美元符号,所以有效设置的例子是$ worker (不带参数运行)或$ worker 123 abc (用参数“123”和“abc”执行scheduled_job.js)

以下步骤在我的情况下工作。

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

这里有些事情应该注意

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