Heroku:当您的dyno/worker崩溃时该怎么办?

12

我有一个工作进程在全天候进行一些处理。然而,有时候代码会崩溃,需要重新启动(即使我捕获了异常,也必须重新启动工作进程才能正常工作)。

当这种情况发生时,你会怎么做?或者是我做错了什么,根本不应该发生这种情况?你的dynos/workers是否也会崩溃,还是只有我会出现这个问题?

谢谢!


对于worker进程(dynos),Heroku将自动重新启动它们(但不是立即)。根据我的尝试 - 对我来说,首次重新启动发生在崩溃后的5分钟内,而两次立即崩溃可能会导致在另外10分钟后重新启动等等(指数退避)。下面的答案向您展示如何立即重启dyno。 - Dimitry K
3个回答

18

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支持团队。他们在所做的工作上非常负责。


10

重新启动特定的Heroku Web Worker的最新命令(2014年):

heroku ps:restart web.1

(在Cedar堆栈上测试)


2
这个命令可以帮助立即重启崩溃的工作进程,无需等待10分钟以进行应用程序自动重启。输入 heroku ps 可以查看 Web 工作进程(dyno)是否已经重新启动。 - AmpT

1
有时,例如在数据库崩溃的情况下,工作进程可能无法自动重启。您需要手动执行以下操作:heroku restart web.1。这对我起作用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接