【问题标题】:Node.JS with forever on Heroku永远在 Heroku 上的 Node.JS
【发布时间】:2011-12-28 14:00:03
【问题描述】:

所以,我需要在 heroku 上运行我的 node.js 应用程序,它运行良好,但是当我的应用程序崩溃时,我需要一些东西来重新启动它,所以我将永远添加到 package.json,并创建了一个名为永远的文件.js 与此:

var forever = require('forever');

var child = new (forever.Monitor)('web.js', {
  max: 3,
  silent: false,
  options: []
});

//child.on('exit', this.callback);
child.start();

forever.startServer(child);

在我的 Procfile(heroku 用来知道从什么开始)我输入:

web: node forever.js

好吧!现在每次我的应用程序崩溃时它都会自动重启,但是,有时(几乎每 1 小时),heroku 开始抛出 H99 - 平台错误,关于这个错误,他们说:

与所有其他需要您采取行动才能纠正的错误不同,此错误不需要您采取行动。请稍后再试,或查看状态网站。

但我只是手动重新启动我的应用程序,错误就会消失,如果我不这样做,它可能需要几个小时才能自行消失。

有人可以帮我吗?也许这是一个永远的问题? Heroku 问题?

【问题讨论】:

  • 你有没有明白是什么原因?
  • 不,但我永远删除了,它不需要 heroku,你应该避免错误,这样你的应用程序才能继续运行
  • 那么 heroku 现在崩溃时会自动重启你的应用吗?
  • 根据我对 heroku 的理解,进程应该重新启动。
  • 来自他们的文档 (devcenter.heroku.com/articles/ps#process-restarts):在正常情况下,长时间运行的 Web 或工作进程偶尔会崩溃,它将立即重新启动,而无需您的任何干预。如果你的进程连续两次崩溃,它会在系统重试前停留十分钟。

标签: node.js heroku


【解决方案1】:

这是免费 Heroku 帐户的问题:Heroku 会在 1 小时不活动后自动终止未付费的应用程序,然后在下次请求进入时重新启动它们。(如下所述,这不适用于付费帐户。如果您扩展到两台服务器并为第二台付费,您将获得两台始终在线的服务器。)-https://devcenter.heroku.com/articles/dynos#dyno-sleeping

这种行为可能不适用于forever。要确认这一点,请运行 heroku logs 并查找“空闲”和“使用 SIGTERM 停止进程”行,然后看看接下来会发生什么。

除了使用forever,您可能想尝试使用集群 API 并在每次死亡时自动创建一个新的子节点。 http://nodejs.org/api/cluster.html#cluster_cluster 是一个很好的例子,您只需将代码放入 else 块中。

结果是您的应用现在更加稳定,而且它可以使用所有可用的 CPU 内核(以我的经验为 4 个)。

缺点是您不能在内存中存储任何状态。如果您需要按照这些方式存储会话或其他内容,请尝试免费的 Redis To Go 插件 (heroku addons:add redistogo)。

这是一个使用 cluster 和 Redis To Go 在 heroku 上运行的示例:https://github.com/nfriedly/node-unblocker

更新:Heroku 最近对免费应用程序的工作方式进行了一些重大更改,最大的改变是它们每天最多只能在线 18 小时,使其无法作为“真正的”网络服务器使用。详情https://blog.heroku.com/archives/2015/5/7/heroku-free-dynos

更新 2:他们再次更改了它。现在,如果您验证您的 ID,您可以不断运行 1 个免费的 dyno:https://blog.heroku.com/announcing_heroku_free_ssl_beta_and_flexible_dyno_hours#flexible-free-dyno-hours

【讨论】:

  • Heroku 这样做是对的,但仅适用于免费的单 dyno 应用程序。付费等级始终保持不变。
  • 你可以使用监控服务,它会一直ping你的服务器,从而让它保持活跃
  • @MuhammadUmer:以这种方式保持免费应用程序的活力,Heroku 最终将完全删除免费应用程序:如果你一直想要它,它的价值必须是每月 7 美元
  • @ChrisV:他们基本上确实完全删除了免费应用程序:您现在每天最多只能有一个免费服务器在线 18 小时 - 所以您不能让任何免费应用程序在线合理的流量。 blog.heroku.com/archives/2015/5/7/new-dyno-types-public-beta
猜你喜欢
  • 2014-07-27
  • 2014-11-29
  • 1970-01-01
  • 2011-09-27
  • 2014-01-03
  • 2015-09-13
  • 2018-01-13
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多