स्पष्ट साइडकी कतार


93

मेरे पास यह कार्यकर्ता है जो हमेशा के लिए चलता है।

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 का उपयोग कर रहा हूं।


क्या आप कोई कतार या शेड्यूल की गई नौकरी हटाना चाहते हैं। या डुप्लिकेट अनुसूचित नौकरी कहना बेहतर है।
सब्यसाची घोष

नए कर्मचारी को लोड करने से पहले मैं नौकरी के हर निशान को हटाना चाहता हूं।
लीनस ओलियंडर

ठीक है आपकी समस्या मिल गई .. इसका मतलब है कि आप सभी अनुसूचित नौकरियों को हटाना चाहते हैं।
सब्यसाची घोष

@haSabyasachiGhosh नहीं, मैं केवल कतार से संबंधित नौकरियों को हटाना चाहता हूं, न कि केवल अनुसूचित नौकरियों को। दूसरे शब्दों में; असफल, चल रही, कतारबद्ध और अनुसूचित नौकरियों को हटा दिया जाना चाहिए।
लिनस ओलियंडर

सभी मदद यहाँ है - github.com/mperham/sidekiq/wiki/API
viks

जवाबों:


161

कतार हटाकर सभी नौकरियों को कतार में हटा देता है।

require 'sidekiq/api' # for the case of rails console

Sidekiq::Queue.new("infinity").clear
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear

हो सकता है साइडकी प्रो आपकी मदद करे।
रंजीथकुमार रवि

5
यहाँ काउंटरों को साफ़ करने के लिए Sidekiq::Stats.new.resetमुझे पता चला है कि इससे मदद मिलती है

14
डिफ़ॉल्ट / पहली कतार को साफ़ करने के लिए:Sidekiq::Queue.all.first.clear
user456584

1
साइडकीक :: Queue.new ("रिपोर्ट")। स्पष्ट और साइडकीक :: क्यूएयू.न्यू ("अलर्ट")। स्पष्ट वर्तमान कतार को साफ करने में मदद करता है। लेकिन व्यस्तता का क्या? मैं "व्यस्त" नौकरियों को कैसे साफ़ करूँ?
डोनाटो

31
उन सभी को साफ करेंSidekiq::Queue.all.each &:clear
मार्को लेज़ेररी

95

इसने मेरे लिए चाल चली:

Sidekiq::Queue.all.each(&:clear)
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
Sidekiq::DeadSet.new.clear

1
धन्यवाद यह काम एक आकर्षण की तरह काम करता था, मैं एक आपातकालीन हाहा में था, साइडकिक waaaaaay के साथ कतार में बहुत सारे कार्यकर्ता थे, क्योंकि यह काम कर रहा था क्योंकि मुझे उम्मीद थी कि मैं killकमांड की तरह देख रहा था
d1jhoni1b

बिल्कुल सही, बस अपने env में मुझे require 'sidekiq/api'काम करने के लिए सांत्वना देना था।
बोनाफेरनैण्डो

19

अधिकांश साइडकी संस्करणों के लिए मेरे लिए काम करता है:

Sidekiq::RetrySet.new.clear

Sidekiq::ScheduledSet.new.clear

स्पष्ट आँकड़े (वैकल्पिक)

Sidekiq::Stats.new.reset

यह न केवल कतार बल्कि पूरे डेटाबेस को फ्लश करता है।
लिनस ओलियंडर

अगर साइडकीक के सभी डेटाबेस को फ्लश करेगा, और रेल कंसोल में ठीक काम करेगा
vidur punj

-2

आप इस कोड को चलाकर अपनी कतार को साफ कर सकते हैं, हालांकि इसमें अंतर्निहित तरीके होंगे।

queue = Sidekiq::Queue.new
queue.each do |job|
  job.delete 
end

ठीक है, यह काम करना चाहिए क्योंकि हमने कतार से सभी नौकरियों को प्राप्त किया और फिर उन्हें एक-एक करके हटा दिया।
असद हमीद

नहीं, यह नहीं है। मौजूदा उत्तरों पर एक नज़र डालें। यह मौजूदा उत्तर का एक डुप्लिकेट भी है।
लिनस ओलियंडर

मैं नहीं जानता कि आप किस बारे में बात कर रहे हैं। क्या आप कृपया मुझे वही उत्तर दिखा सकते हैं जो मैंने पोस्ट किया है?
असद हमीद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.