我目前正在使用heroku(www.heroku.com)来托管我的网络应用程序:http://jeveuxskier.ski,它作为一个http应用程序运行良好。 现在我想将一个非http nodeJS应用程序部署到heroku。基本上,它只是一个cron,每天1:30调用一次web服务,并将结果存储到我的firebase数据库中。
然而,我无法设法在heroku上部署它,因为它似乎想要启动http服务器来接收请求等。
我已经尝试将我的脚本放入http服务器中,当我调用我的heroku容器URL时,看起来cron服务很好,但几分钟后,容器进入了贪睡状态。 如果有人知道如何将这种脚本部署到heroku(免费)帐户:
var rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0, new schedule.Range(0, 6)]; // every day
rule.hour = 1; // 1h to 1h30 am
rule.minute = 30;
var j = schedule.scheduleJob(rule, function(){
console.log("cron woke up at:" + new Date());
});
提前致谢,
致以最诚挚的问候,
Quentin BERNET
答案 0 :(得分:4)
如果您使用免费动态,您的网络应用将ALWAYS sleep after 30 minutes。没有办法解决这个问题。如果你想要非睡眠动态,你需要使用付费动态。
话虽如此,你确实可以使用自由工作者dyno。此dyno将持续运行,不需要Web服务器即可运行。
以下是您可以执行此操作的方法(这是我刚刚部署并自行测试的完整,有效的示例应用程序):
<强> Procfile 强>
worker: node worker.js
<强> worker.js 强>
console.log("Worker starting...");
setInterval(() => {
console.log("Worker still running.");
}, 1000);
<强>的package.json 强>
{
"name": "test",
"version": "1.0.0",
"main": "worker.js",
"license": "ISC"
}
如果你将这个应用程序推送到Heroku(git push heroku master
),然后运行以下命令,你将运行一个免费的工作人员dyno:
$ heroku ps:scale web=0 worker=1
如果您随后查看Heroku流日志,您将看到您的工作进程确实正在运行,因为您可以通过日志输出进行验证:
$ heroku logs --tail
2017-01-27T17:28:01.476780+00:00 heroku[worker.1]: Starting process with command `node worker.js`
2017-01-27T17:28:02.206558+00:00 heroku[worker.1]: State changed from starting to up
2017-01-27T17:28:03.810579+00:00 app[worker.1]: running worker...
2017-01-27T17:28:04.819944+00:00 app[worker.1]: Worker still running.
2017-01-27T17:28:05.821946+00:00 app[worker.1]: Worker still running.
2017-01-27T17:28:06.822191+00:00 app[worker.1]: Worker still running.
2017-01-27T17:28:07.826204+00:00 app[worker.1]: Worker still running.
2017-01-27T17:28:08.830177+00:00 app[worker.1]: Worker still running.
2017-01-27T17:28:09.831974+00:00 app[worker.1]: Worker still running.
2017-01-27T17:28:10.834909+00:00 app[worker.1]: Worker still running.
2017-01-27T17:28:11.834361+00:00 app[worker.1]: Worker still running.
2017-01-27T17:28:12.835244+00:00 app[worker.1]: Worker still running.