在Heroku上部署没有http服务器的nod​​eJS App

时间:2017-01-27 08:30:10

标签: node.js heroku service cron

我目前正在使用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

1 个答案:

答案 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.