我有一个工作进程在全天候进行一些处理。然而,有时候代码会崩溃,需要重新启动(即使我捕获了异常,也必须重新启动工作进程才能正常工作)。
当这种情况发生时,你会怎么做?或者是我做错了什么,根本不应该发生这种情况?你的dynos/workers是否也会崩溃,还是只有我会出现这个问题?
谢谢!
我有一个工作进程在全天候进行一些处理。然而,有时候代码会崩溃,需要重新启动(即使我捕获了异常,也必须重新启动工作进程才能正常工作)。
当这种情况发生时,你会怎么做?或者是我做错了什么,根本不应该发生这种情况?你的dynos/workers是否也会崩溃,还是只有我会出现这个问题?
谢谢!
Heroku应该在每次worker崩溃时重新启动它。据我所知,您无需选择或配置任何内容。只要jobs:work任务中存在的内容失败了,就会立即执行。
如果您的Web应用程序严重依赖后台作业,您可以创建一个rake任务来查找最后一个要更新的记录,并执行一个后台作业来更新它。或者自动化rake任务以查找其他需要更新的记录,自上次崩溃以来。
或者,您可以按照这篇文章中指示的方式(使用delayed_job)手动强制重启worker:
heroku workers 0;
heroku workers 1;
或者,您可以通过执行以下操作重启特定的工作程序(在此文章中提到):
heroku restart worker.1
顺便提一下,尝试使用1.9堆栈。在这之前,请确保您的应用程序与1.9.2兼容。希望那里崩溃不太频繁:
heroku stack:migrate bamboo-mri-1.9.2
如果仍然出现这样的问题,最好联系Heroku支持团队。他们在所做的工作上非常负责。
重新启动特定的Heroku Web Worker的最新命令(2014年):
heroku ps:restart web.1
(在Cedar堆栈上测试)
heroku ps
可以查看 Web 工作进程(dyno)是否已经重新启动。 - AmpT