簡體   English   中英

如何使用新的生產Rails代碼重試失敗的sidekiq作業?

[英]How to make failed sidekiq job retry with new production Rails code?

我正在使用Sidekiq / Redis在Heroku上運行Rails 5.0.x應用程序,並且我部署了新代碼,應該使用多次重試的Sidekiq失敗作業。

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

Rails有兩個與此相關的功能:急切加載和自動加載。 自動加載僅在開發模式下處於活動狀態且不是線程安全的,因此Sidekiq禁用它並僅使用急切加載。 急切加載僅在啟動服務器時加載代碼一次 - 它不會在作業之間重新加載代碼。 如果您的代碼位於標准Rails目錄之外(例如app / models,app / controllers等),除非您在Rails應用程序配置中添加eager_load_paths的路徑,否則Sidekiq將不會看到它:

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

“因為Sidekiq不會在作業之間重新加載代碼”,這是否意味着我不能在不開始新工作的情況下使用新的rails生產代碼? 或者,如果我重新啟動失敗的作業,它是否會使用新部署的代碼?

將新代碼部署到Heroku將自動重啟所有dynos,包括worker dynos。 所以你不必手動重啟它。 當然,重新啟動Sidekiq后會獲取新代碼。

事實證明,我認為這意味着:

自動加載僅在開發模式下處於活動狀態且不是線程安全的,因此Sidekiq禁用它並僅使用急切加載。 急切加載僅在啟動服務器時加載代碼一次 - 它不會在作業之間重新加載代碼。

意味着您必須在部署后重新啟動Heroku上的sidekiq。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM