Node.JS永远在Heroku上

Rog*_*ves 10 heroku node.js

所以,我需要在heroku上运行我的node.js应用程序,它运行得很好,但是当我的应用程序崩溃时,我需要重新启动它,所以我永远添加到package.json,并创建了一个名为forever.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);
Run Code Online (Sandbox Code Playgroud)

在我的Procfile(heroku用来知道要开始什么)我把:

web: node forever.js
Run Code Online (Sandbox Code Playgroud)

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

与需要您纠正的所有其他错误不同,此错误不需要您采取任何操作.请稍后再试,或查看状态网站.

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

有人能帮我一下吗?也许这是一个永远的问题?一个heroku问题?

Nat*_*dly 10

这是免费Heroku帐户的问题:Heroku会在1小时不活动后自动杀死未付费应用,然后在下次请求时将其旋转回来.(如下所述,这不适用于付费帐户.如果您扩展最多两个服务器并为第二个服务器付费,您将获得两个永远在线的服务器.) - https://devcenter.heroku.com/articles/dynos#dyno-sleeping

这种行为可能不适合forever.要确认这一点,请运行heroku logs并查找"空闲"和"使用SIGTERM停止进程"行,然后查看接下来的内容.

forever您可能希望尝试使用Cluster 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小时,这使得它无法像"真正的"Web服务器那样无法使用.详情请访问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

  • 此外,工作进程永远不会闲置 (2认同)