如何使用新的生产Rails代码重试失败的sidekiq作业?

时间:2017-04-07 21:56:08

标签: ruby-on-rails heroku sidekiq

我正在使用Sidekiq / Redis在Heroku上运行Rails 5.0.x应用程序,并且我部署了新代码,应该使用多次重试的Sidekiq失败作业。

https://github.com/mperham/sidekiq/wiki/FAQ中,我看到了:

  

Rails有两个与此相关的功能:渴望加载和   自动加载。自动加载仅在开发模式下有效,而不是   线程安全所以Sidekiq禁用它并仅使用急切加载。急于   加载只在启动服务器时加载一次代码 - 它确实如此   不在作业之间重新加载代码。如果您的代码位于   标准的Rails目录(例如app / models,app / controllers,   等),除非你添加路径,否则Sidekiq将不会看到它   Rails应用程序配置中的eager_load_paths:

# in config/application.rb
module AcmeCorp
  class Application < Rails::Application
    config.eager_load_paths += ["#{config.root}/lib/workers"]
  end
end

“因为Sidekiq不会在作业之间重新加载代码”,这是否意味着我不能在不开始新工作的情况下使用新的rails生产代码?或者,如果我重新启动失败的作业,它是否会使用新部署的代码?

2 个答案:

答案 0 :(得分:3)

将新代码部署到Heroku将自动重启所有dynos,包括工作人员dynos。所以你不必手动重启它。当然,重新启动Sidekiq后会获取新代码。

答案 1 :(得分:0)

事实证明,我认为这意味着:

  

自动加载仅在开发模式下处于活动状态且不是线程安全的   所以Sidekiq禁用它并仅使用急切加载。渴望加载   在启动服务器时只加载一次代码 - 但事实并非如此   在作业之间重新加载代码。

表示在部署后必须在Heroku上重新启动sidekiq。

您可以使用heroku ps:restart worker -a myapp

进行操作