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

标签 node.js heroku service cron

我目前正在使用 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());  
});

提前致谢

最好的问候,

昆汀·伯内特

最佳答案

如果您使用的是免费测功机,您的网络应用程序将 ALWAYS sleep after 30 minutes .没有办法解决这个问题。如果您想拥有非 sleep 测功机,则需要使用付费测功机。

话虽如此,您确实可以使用免费的 worker dyno。此测功机将持续运行,不需要网络服务器即可运行。

以下是您的操作方法(这是我自己部署和测试过的完整、有效的示例应用程序):

配置文件

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),然后运行以下命令,您将运行一个免费的 worker 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.

关于node.js - 在 Heroku 上部署没有 http 服务器的 nodeJS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41889672/

相关文章:

node.js - 从 Promise Sequelize 返回值

node.js - 如何在简单的 Mocha 单元测试中处理 UnhandledPromiseRejectionWarning

database - 将 Heroku 上的 Postgres 从 9.2 升级到 9.3?

服务中的android自定义 toast

javascript - 如何使用异步 I/O 将实时数据集写入磁盘?

angularjs - 无法运行 `npm install -g angular/cli`

Heroku 上的 Node.js 子进程与单个 Dyno

ruby-on-rails - ActiveRecord::UnknownAttributeError?

web-services - 在meteor中使用HTTP.get获取通过HTTP.post发布的数据

c - C 后台编程