我正在使用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生产代码?或者,如果我重新启动失败的作业,它是否会使用新部署的代码?
答案 0 :(得分:3)
将新代码部署到Heroku将自动重启所有dynos,包括工作人员dynos。所以你不必手动重启它。当然,重新启动Sidekiq后会获取新代码。
答案 1 :(得分:0)
事实证明,我认为这意味着:
自动加载仅在开发模式下处于活动状态且不是线程安全的 所以Sidekiq禁用它并仅使用急切加载。渴望加载 在启动服务器时只加载一次代码 - 但事实并非如此 在作业之间重新加载代码。
表示在部署后必须在Heroku上重新启动sidekiq。
您可以使用heroku ps:restart worker -a myapp