所以,我需要在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
| 归档时间: |
|
| 查看次数: |
11116 次 |
| 最近记录: |