在 Heroku 上部署没有 http 服务器的 nodeJS 应用程序

Que*_*net 5 cron service heroku node.js

我目前正在使用 heroku (www.heroku.com) 来托管我的网络应用程序:http : //jeveuxskier.ski,它作为一个 http 应用程序运行良好。现在我想将非 http nodeJS 应用程序部署到 heroku。基本上,它只是一个每天 1:30 调用网络服务并将结果存储到我的 firebase 数据库中的 cron。

但是,我无法在 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());  
});
Run Code Online (Sandbox Code Playgroud)

提前致谢,

此致,

昆汀·伯内

rde*_*ges 8

如果您使用免费 dynos,您的网络应用程序将始终在 30 分钟后休眠。没有办法解决这个问题。如果您想拥有非睡眠测功机,则需要使用付费测功机。

话虽如此,您确实可以使用免费的工人 dyno。这个 dyno 将持续运行,不需要网络服务器来运行。

以下是您的操作方法(这是一个完整的、可运行的示例应用程序,我刚刚部署并测试了自己):

配置文件

worker: node worker.js
Run Code Online (Sandbox Code Playgroud)

工人.js

console.log("Worker starting...");

setInterval(() => {
  console.log("Worker still running.");
}, 1000);
Run Code Online (Sandbox Code Playgroud)

包.json

{
  "name": "test",
  "version": "1.0.0",
  "main": "worker.js",
  "license": "ISC"
}
Run Code Online (Sandbox Code Playgroud)

如果您将此应用程序推送到 Heroku ( git push heroku master),然后运行以下命令,您将运行一个免费的工人 dyno:

$ heroku ps:scale web=0 worker=1
Run Code Online (Sandbox Code Playgroud)

如果您随后查看 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.
Run Code Online (Sandbox Code Playgroud)