【问题标题】:How to make failed sidekiq job retry with new production Rails code?如何使用新的生产 Rails 代码重试失败的 sidekiq 作业?
【发布时间】:2017-09-03 09:35:21
【问题描述】:

我正在使用 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 生产代码?或者如果我重新启动失败的作业,它会使用新部署的代码吗?

【问题讨论】:

    标签: ruby-on-rails heroku sidekiq


    【解决方案1】:

    将新代码部署到 Heroku 将自动重新启动所有 dyno,包括 worker dyno。因此,您不必手动重新启动它。当然,重启 Sidekiq 后会获取新代码。

    【讨论】:

    • 嗯..我想知道为什么根据我们的错误报告系统,我的 Sidekiq 重试似乎使用的是旧代码?
    【解决方案2】:

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

    自动加载仅在开发模式下有效,不是线程安全的 所以 Sidekiq 禁用它并仅使用急切加载。渴望加载 启动服务器时仅加载一次代码 - 它不会 在作业之间重新加载代码。

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

    heroku ps:restart worker -a myapp 可以做什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多