![](/img/trans.png)
[英]Sidekiq & Clock Background Task On Redis, Rails, Heroku Only Updating Some
[英]Understanding Background Workers with Redis, Sidekiq, Heroku and Rails 5
我有一個Rails 5應用程序,在這里我開始使用Sidekiq,Heroku和Redis將各種作業移到后台。
到目前為止,我有具有相同名稱的類的ResetFinanceDataWorker。
//reset_finance_data_worker.rb
class ResetFinanceDataWorker
include Sidekiq::Worker
sidekiq_options retry: false
def perform()
end
end
我可以通過調用ResetFinanceDataWorker.perform_in(10.seconds)
來調用ResetFinanceDataWorker.perform_in(10.seconds)
。 理想情況下,我希望在一個文件中包含多個工作程序,如下所示:
//finance_worker.rb
class AnotherWorker
include Sidekiq::Worker
sidekiq_options retry: false
def perform()
end
end
class ResetFinanceDataWorker
include Sidekiq::Worker
sidekiq_options retry: false
def perform()
end
end
並能夠調用FinanceWorker.AnotherWorker.perform_in(10.seconds)。 但是,這是不可能的。
有人可以向我解釋1)我將如何進行這項工作? 和2)關於組織工作文件的最佳實踐。
謝謝。
最佳做法和約定是在一個帶有相應文件名的文件中僅放置一個類。 工人或任何其他階層都沒有關系。 如果要組織它們,可以將類似的工作程序包裝在一個模塊中,然后將其移動到單獨的文件夾finance_worker
:
module FinanceWorker
class AnotherWorker
end
end
在這種情況下,您可以調用FinanceWorker::AnotherWorker.perform_async
更新:
在app/jobs
創建一個單獨的文件夾finance_worker
然后將所有需要的工作程序文件移動到那里。 將所有這些worker類包裝在module FinanceWorker
。 我的意思是,分開包裝,仍然放在不同的文件中,仍然only one class, wrapped in module, inside the file
。
如果您有10名工作人員,則他們有10個文件。 但這是Sidekiq的工作人員,而不是heroku的工作人員,請不要混淆他們。 要啟動Sidekiq,您只需要Procfile中的一行即可: worker: bundle exec sidekiq
。 這條線將為Sidekiq啟動1個heroku工人dyno,這將啟動他的所有10個工人。 沒關系,這是常見的做法。 如果您注意到Sidekiq的1個dyno不夠,您總是可以添加更多,它們將在隊列之間划分隊列。
並且不要忘記您可以為worker指定隊列名稱。 默認情況下,所有作業都進入常規default
隊列。 如果您希望某個工作人員擁有自己的隊列,只需將其添加到sidekiq_options
:
sidekiq_options retry: false, queue: 'finance'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.