ruby-on-rails - 延迟作业重启 + Capistrano 最佳实践

标签 ruby-on-rails ruby-on-rails-3 capistrano delayed-job

我只是想了解使用 capistrano 重新启动延迟工作 worker 的最佳实践。我有一群 worker 处理长时间的工作(最多 10 分钟)。

在工作人员正在处理的部署期间,我遇到了两种情况-

1)

我在部署之前停止延迟的工作人员:重启任务并在部署:重启任务后再次启动它们。

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

2)
我还尝试在重启任务后停止/启动 delayjobs 工作人员 - 但这导致了各种戏剧性的情况,即任务将在没有等待的情况下停止,delayedjobs 表将它们列出并分配给一个 PID 不存在的工作人员!

还有其他选择吗?或者我是否被迫像场景 1 中提到的那样等待。

非常感谢。

编辑:我刚刚意识到场景 1 .. 它不会等待!即使停止任务还没有完成,它也会强行杀死我的 worker !

 ** [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.

最佳答案

如果您的部署更改更改了数据库架构,那么您将不得不等待。

如果没有,您可以设置一个标志,让 worker 在每项工作结束时检查。部署时,您设置标志,一旦长时间运行的工作人员完成,它会通过执行新工作人员来替换自己。这样你就永远不会真正启动和停止工作人员——他们只是一直在运行,并且会在开始下一项工作时加载最新的代码。

关于ruby-on-rails - 延迟作业重启 + Capistrano 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9697273/

相关文章:

ruby-on-rails - 突然找不到 Rails 安装

ruby-on-rails - Brew与ImageMagick链接

ruby-on-rails-3 - 如何从 capybara 规范中引用 asset_url

ruby-on-rails - Rails 3.1 Formtastic 输入自定义 id 或类

ruby - Capistrano 3.0 — 现在如何安全地提示输入密码?

ruby-on-rails - Rails 4.1 强制 ActionMailer 返回其他值

ruby-on-rails - `require' : cannot load such file -- rest_client (LoadError)

sql-server - Rails 3.2.8 - 一个 Rails 应用程序中的多个数据库访问

ruby - 仅在特定服务器上调用 delayed_job capistrano 任务

ruby-on-rails - Capistrano - 身份验证失败