使用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
运行。
把它变成一个脚本
- 删除
.js
结尾 - 在顶部插入'shebang':
#! /app/bin/node
#! /app/bin/node
[1] [2] - 移动到
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
不应该在任务中指定。 下面是如何得到它的工作:
-
在您的Procfile中,为您的脚本定义一个stream程types。 请参阅下面的一个典型的Procfile与Web进程,并运行“scheduled_job.js”,第二个过程types富有想象力地命名为“工人”。
web: node app.js worker: node scheduled_job.js
-
在Heroku调度程序的“任务”列中,只需input具有或不具有参数的过程types(在本例中为“worker”)的名称。 不要在它之前input“节点” 。 Heroku在它前面显示一个美元符号,所以有效设置的例子是
$ worker
(不带参数运行)或$ worker 123 abc
(用参数“123”和“abc”执行scheduled_job.js)
以下步骤在我的情况下工作。
- 在根文件夹中添加
worker.js
文件。 - 在worker.js中。 写一个简单的函数,就像上面一样。
function sayHello() { console.log('Hello'); } sayHello();
- 转到heroku调度程序加载项。 点击“添加新工作”,并在该字段中input“工人”。 然后设置时间间隔,然后点击保存。
这里有些事情应该注意
- 更新后工作设置。如果使用上面的例子,你可以使用
heroku run node worker.js
来检查它是否工作。 应该在terminal上显示“你好”。 - 我为我的node.js项目使用express-babel starter。