我使用 Cron 创建了一个应用程序,以便在本地完成(在/project_root/scraper/index.js
文件内)时抓取完美的数据:
const everyMorning = new CronJob('0 15 7 * * *', () => {
//runScraper1(); runScraper2(); runScraper3(); (This runs at 7:15 AM)
}, null, true, 'America/Los_Angeles');
但是现在我把它放在Heroku上,我发现这个函数基本上不会运行,因为我猜Heroku在一些不活动之后关闭了服务器(大约一个小时左右)。看起来我需要使用Heroku Scheduler;但文档(Ruby),我不知道。我在Node中找到了大量关于如何做到这一点的脱节信息,所以这就是我收集的内容......
...
一个策略似乎是:
1)创建bin
文件夹和herokuFile
,如下所示:project_root/bin/node/herokuFile
(将herokuFile
重命名为您想要的任何内容,但不要使用扩展程序比如.js
)。
2)将文件写成如下所示:
#! /app/.heroku/node/bin/node
var start = require('./app.js');
function activateTask() {
start();
}
activateTask();
process.exit();
3)显然我应该将module.exports = start
添加到我的app.js
文件或类似内容......然后在终端中运行heroku run activateTask
...?
...
另一种策略似乎是:
a)运行heroku addons:create scheduler:standard
以安装Heroku Scheduler,然后运行heroku addons:open scheduler
以在浏览器中打开调度程序。然后在调度程序界面中,编写" worker" (没有节点)以便它显示$ worker
,并将其设置为daily
。
b)在项目的根目录中添加名为Procfile
的文件(不要更改名称,不要使用扩展名)。让Procfile说:
web: node app.js
worker: node herokuCron.js
c)制作一个herokuCron.js
文件(也在project_root/bin/node/herokuFile
中),然后说:
#!/usr/bin/env node
function logMessage() {
console.log('GONG! An hour has passed and herokuCron.js has activated');
}
logMessage();
d)......?
...
毋庸置疑,这些方法都不适合我,我也不明白为什么(我只是一个初级开发者)。我到处寻找,但我无法弄清楚如何运行我简单的日常任务功能。