Ruby delayed_job gem如何停止进程



我目前正在使用delayed_job_active_record gem来长期运行一些计划任务。进程在heroku上的一个单独的worker dyno后台运行,很少出错,但在某些情况下,我希望能够在运行中期停止进程。我一直在本地运行流程,由于我的设置,计划的任务只会启动流程,这本质上是一个很长的循环。

使用

bin/delayed_job stop

只会停止作业,但由于该过程已经启动,因此不会超出此范围。正因为如此,我似乎无法在不重新启动整个dyno的情况下停止这个过程。这似乎有点过分,但这是我目前唯一的选择。

非常感谢任何帮助

我不认为有任何方法可以在不像你所做的那样基本上杀死进程的情况下中断它。我通常会删除数据库中的作业记录,然后终止运行它的工作程序,这样它就不会只是重试该作业(如果您已经为该作业启用了重试(。

另一个选项。。。既然你知道这是一个漫长的过程,而且,我想,有多个步骤。。。模块化操作和/或添加对您放置在模型中某个位置的"已取消"标志的定期检查。如果您检测到已取消的请求,则可以放弃并进行所需的任何清理。无论如何,这可能是首选,这样您就可以更明确地管理中止时发生的情况。

最新更新