我有一名工人每天24小时进行一些处理。但是,有时代码崩溃并且需要重新启动(即使我捕获异常,我必须重新启动worker以使其工作)。
当这种情况发生时,你做了什么,或者我做错了什么,这根本不应该发生?你的dynos /工人是撞车还是仅仅是我?
感谢
答案 0 :(得分:17)
Heroku应该在每次崩溃时重启一名工人。据我所知,您不必选择或配置任何东西。无论你的工作是什么:工作任务一旦失败就会被执行。
如果您严重依赖Web应用程序中的后台作业。您可以创建一个rake任务,找到要更新的最后一条记录,然后执行后台作业来更新它。或者自动执行rake任务以查找自上次崩溃以来需要更新的其余记录。
或者,您可以按照this article(使用delayed_job)中的说明手动重启工作人员:
heroku workers 0;
heroku workers 1;
或许您可以通过执行(在this article中提到)重新启动特定的工作人员:
heroku restart worker.1
顺便说一下,试试1.9 stack。在此之前,请确保您的应用与1.9.2兼容。希望崩溃在那里不那么频繁:
heroku stack:migrate bamboo-mri-1.9.2
如果发生这种问题仍然存在。最好联系Heroku支持。他们对自己的所作所为非常敏感。
答案 1 :(得分:9)
重新启动特定 heroku网络工作者的最新命令(2014):
heroku ps:restart web.1
(在Cedar堆栈上测试)
答案 2 :(得分:1)
有时,例如在数据库崩溃的情况下,工作人员可能无法自动重启。你需要这样做。
heroku restart web.1
它对我有用。