延迟工作重启+ Capistrano最佳实践

Jam*_*msi 13 capistrano ruby-on-rails delayed-job ruby-on-rails-3

我只想了解使用capistrano重新启动延迟作业工作人员的最佳实践.我有一大堆工人处理长期工作(最多10分钟).

在部署期间我遇到两种情况,而工人正在处理 - 

1)

我在部署之前停止延迟作业工作者:重新启动任务并在deploy:restart任务之后再次启动它们.

但在这种情况下,它将不会重新启动我的应用程序,直到延迟的作业完成(这可能没问题 - 但是封面部署脚本确实位于那里直到作业完成并且它可以停止所有工作人员)然后继续应用程序重新启动任务.

2)我也尝试在重启任务后停止/启动delayedjobs worker - 但是这导致了各种各样的戏剧,其中任务将暂停而不等待delayedjobs表将它们列出并分配给具有不具有PID的PID的工作者存在!

还有其他选择吗?或者我被迫如方案1中所提到的那样等待.

非常感谢.

编辑:我刚刚实现了方案1 ..它不等待!即使没有完成,停止任务也会强行杀死我的工作人员!

 ** [out] delayed_job: trying to stop process with pid 9630...
 ** [out] delayed_job: process with pid 9630 won't stop, we forcefully kill it...
 ** [out] 
 ** [out] delayed_job: process with pid 9630 successfully stopped.
Run Code Online (Sandbox Code Playgroud)

shi*_*ara 0

您可以修复第二种情况,将 pid 文件放在共享目录中以避免它消失。第二种情况是可行的,如果您没有进行一些迁移,可能会与您延迟的工作发生冲突。