साइडकीक से सभी नौकरियों को कैसे साफ़ करें?


119

मैं रेल अनुप्रयोग में पृष्ठभूमि कार्यों के लिए साइडकीक का उपयोग कर रहा हूं। अब नौकरियों की संख्या अधिक हो गई है, इसलिए मैं सभी नौकरियों को खाली करना चाहता हूं। मैंने कंसोल में निम्न कमांड की कोशिश की

Sidekiq::Queue.new.clear

लेकिन यह निम्नलिखित त्रुटि दे रहा था।

NameError: uninitialized constant Sidekiq::Queue 

मैं साइडकीक से सभी नौकरियों को कैसे साफ करूं?


include 'sidekiq'पहले प्रयास करें
बेंज

@BenjaminSinclaire इसकी टाइपिंग दे रहा है: गलत तर्क टाइप स्ट्रिंग (अपेक्षित मॉड्यूल)
कैन

3
require 'sidekiq'इससे पहले प्रयास करें
उरई अगस्सी

1
मैं हमेशा (वास्तव में हमेशा) भ्रमित होता हूं और इसमें आवश्यकता होती है :)
बेंज

जवाबों:



207

आप ऐसा कर सकते हैं जैसा कि 1077 के अंक में कहा गया है या जैसा कि इस ब्लॉग में noobsippets पर बताया गया है

दोनों का सुझाव है कि हम निम्न कार्य करते हैं, और रेल कंसोल पर किया जा सकता है:

Sidekiq.redis { |conn| conn.flushdb }


यह मेरे द्वारा उपयोग किए जा रहे रेल एप्लिकेशन पर मेरे प्रमाणीकरण को रीसेट करने के लिए प्रकट होता है (जिसका अर्थ है कि मुझे अपने HTTP क्लाइंट में कुकीज़ वापस कॉपी करना होगा)। क्या इससे बचाव का कोई तरीका है?
अंतर्मुहूर्त

1
हैलो, ब्रैंडमोन। क्या आप अपने प्रोजेक्ट के सत्र को नियंत्रित करने के लिए रेडिस का उपयोग कर रहे हैं? क्योंकि ये कमांड रेडिस में संग्रहीत सभी डेटा को "क्लीन" करने के लिए हैं, यह रिलेशनल डेटाबेस में ड्रॉप डेटाबेस या ड्रॉप टेबल के बराबर है।
जोनाथनक्लिक्सो

1
यह उसके मतों को मानते हुए स्वीकृत उत्तर होना चाहिए।
एम। हबीब

redis-cli flushdbयदि आप अपने रेल सर्वर से एक अलग सर्वर पर रेडिस चला रहे हैं तो यह अधिक अनुमानित रूप से काम करता है। मैं सोच रहा था कि redis-cli flushdbजब तक मुझे याद नहीं आया कि मुझे मेजबान और बंदरगाह के तर्कों को शामिल करने की आवश्यकता क्यों नहीं थी।
मॉरिस

4
इस दृष्टिकोण के साथ समस्या यह है कि यदि आप अलग-अलग सेवाओं में समान रेडिस / इलास्टिक साझा कर रहे हैं, तो यह रेडिस डीबी के अन्य सभी डेटा को भी स्पष्ट करने वाला है।
चार्ल्स स्कारिया

80

स्पष्ट साइडकीक नौकरियां आदेश:

require 'sidekiq/api'

# Clear retry set

Sidekiq::RetrySet.new.clear

# Clear scheduled jobs 

Sidekiq::ScheduledSet.new.clear

# Clear 'Dead' jobs statistics

Sidekiq::DeadSet.new.clear

# Clear 'Processed' and 'Failed' jobs statistics

Sidekiq::Stats.new.reset

# Clear specific queue

stats = Sidekiq::Stats.new
stats.queues
# => {"main_queue"=>25, "my_custom_queue"=>1}

queue = Sidekiq::Queue.new('my_custom_queue')
queue.count
queue.clear

3
आप सभी कतारों को भी साफ़ कर सकते हैं Sidekiq::Queue.all.map(&:clear)... उपयोगी है जब आप अपने लोकेल डीबी को ठेस के साथ सिंक करते हैं
can

36

नवीनतम साइडकीक के रूप में, बस इसे उड़ा दें:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

हां, सभी को साफ करने का आदेश शाब्दिक रूप से एक बम इमोजी है। के लिए भी काम करता है Sidekiq::RetrySet

या यदि आप कोई मज़ा नहीं कर रहे हैं तो आप उपयोग कर सकते हैं q.clear


1
OMG, यह क्या बिल्ली है? @Xavier, क्या कोई विधि है जिसका नाम है।, क्या आप मुझे इस विधि (💣) पर डॉक्टर का मार्गदर्शन कर सकते हैं।
कोडमिलन

2
@codemilan इस ब्लॉग पोस्ट को देखें: blog.honeybadger.io/…
Modus Tollens

मैं invalid byte sequence in US-ASCII (ArgumentError)अमल में आया q.💣: /
शंकर त्यागराजन

21
redis-cli flushdb

आप भी उपयोग कर सकते हैं redis-cli flushall


5
इस दृष्टिकोण के साथ समस्या यह है कि यदि आप अलग-अलग सेवाओं में समान रेडिस / इलास्टिक साझा कर रहे हैं, तो यह db में अन्य सभी डेटा को भी स्पष्ट करने वाला है।
चार्ल्स स्कारिया

13

एक पंक्ति में रेल धावक का उपयोग करें

rails runner 'Sidekiq.redis { |conn| conn.flushdb }'



1

यदि आप विशिष्ट कतारों से नौकरियों को हटाना चाहते हैं:

queue = Sidekiq::Queue.new("default")
queue.each do |job|
  job.klass # => 'TestWorker'
  job.args # => ['easy']
  job.delete if job.jid == 'abcdef1234567890' || job.klass == 'TestWorker'
end

सभी साइडकीक और महत्वपूर्ण कंसोल कमांड के बारे में पढ़ें- https://medium.com/@shashwat12june/all-you-need-to-know-about-sidekiq-a4b770a71f8f



0

मुझे एहसास हुआ कि Sidekiq.redis { |conn| conn.flushdb }रेडिस डेटाबेस से सभी कुंजी को हटा दिया गया है। सभी साइडकीक कतारों का उपयोग करने के लिए एक सुरक्षित तरीका है redis-cli:

redis-cli keys "*queue:*" | xargs redis-cli del

वही साइडकीक एपीआई के साथ हासिल किया जा सकता है (देखें रवि प्रकाश सिंह का जवाब )

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