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

Ruby on rails 如何使用新的生产Rails代码重试失败的sidekiq作业?,ruby-on-rails,heroku,sidekiq,Ruby On Rails,Heroku,Sidekiq,我正在Heroku上用Sidekiq/Redis运行Rails 5.0.x应用程序,并且我部署了一个新代码,一个失败的Sidekiq作业正在重试多次,应该使用它 在这方面,我看到: Rails有两个与此相关的特性:即时加载和 自动加载。自动加载仅在开发模式下处于活动状态,不可用 线程安全,因此Sidekiq禁用它并仅使用即时加载。渴望的 在启动服务器时,加载只会加载代码一次-确实如此 不要在作业之间重新加载代码。如果您的代码位于 标准Rails目录(例如应用程序/模型、应用程序/控制器、, 等等

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

在这方面,我看到:

Rails有两个与此相关的特性:即时加载和 自动加载。自动加载仅在开发模式下处于活动状态,不可用 线程安全,因此Sidekiq禁用它并仅使用即时加载。渴望的 在启动服务器时,加载只会加载代码一次-确实如此 不要在作业之间重新加载代码。如果您的代码位于 标准Rails目录(例如应用程序/模型、应用程序/控制器、, 等等),除非您将路径添加到 Rails应用程序配置中的渴望加载路径:

config/application.rb中的
#
AcmeCorp模块
类应用程序

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

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

自动加载仅在开发模式下处于活动状态,并且不是线程安全的 所以Sidekiq禁用它,只使用即时加载。急装 启动服务器时只加载一次代码-不会加载 在作业之间重新加载代码

这意味着您必须在部署后在Heroku上重新启动sidekiq


您可以使用heroku ps:restart worker执行此操作-将新代码部署到heroku的myapp将自动重新启动您的所有dynos,包括worker dynos。因此,您不必手动重新启动它。当然,在重启Sidekiq后,它将接收新代码。

Hmm。我想知道为什么根据我们的错误报告系统,我的Sidekiq重试似乎使用了旧代码?
# in config/application.rb
module AcmeCorp
  class Application < Rails::Application
    config.eager_load_paths += ["#{config.root}/lib/workers"]
  end
end