मेरे पास यह कार्यकर्ता है जो हमेशा के लिए चलता है।
class Worker
include Sidekiq::Worker
sidekiq_options queue: "infinity", retry: true
def perform(params)
# ...
self.class.perform_in(30.seconds, params)
end
end
समस्या यह है कि मैं श्रमिकों को इस तरह से शुरू करता हूं। config/initializers/load_workers.rb
Rails.application.config.after_initialize do
if ENV["SIDEKIQ"] == "1"
Worker.perform_async({})
end
end
साइडकीक शुरू करने के लिए इसका उपयोग करना SIDEKIQ=1 sidekiq --verbose --environment production -C config/sidekiq.yml
।
इसका मतलब यह है कि पुराने श्रमिकों को रोकने के लिए, जो वर्तमान में चल रहे हैं, लेकिन दोनों को पुनर्निर्धारित किया जा रहा है।
मैंने इसे स्टार्ट अप पर चलाने की कोशिश की (नए कार्यों को लोड करने से पहले), लेकिन यह काम नहीं किया।
q = []
q += Sidekiq::RetrySet.new.select { |job| job.klass.match(/Worker/) }
q += Sidekiq::Queue.new("infinity").select { |job| job.klass.match(/Worker/) }
q += Sidekiq::ScheduledSet.new.select { |job| job.klass.match(/Worker/) }
q.each(&:delete)
5-ish deploys के बाद बाद के लिए निर्धारित कतार में डुप्लिकेट श्रमिकों के झुंड हैं। तो, क्या हर कतार को एक कतार में साफ करने और पहले से चल रही नौकरियों को पुनर्निर्धारण से रोकने का कोई तरीका है?
मैं साइडकीक 3.0 का उपयोग कर रहा हूं।