यहां Honeybadger पर, हम Sidekiq का बहुत उपयोग करते हैं, और यह बहुत अच्छा है। लेकिन एक समस्या है जिसका मैंने अक्सर सामना किया है।
...आप देखते हैं, मैं आमतौर पर विकास में Sidekiq नहीं चलाता। लेकिन मैन्युअल टेस्टिंग के दौरान, मैं बहुत सारे जॉब्स को एनक्यू करता हूँ। तो अगली बार जब मैं Sidekiq *चलाता हूँ* तो यह उन सभी जॉब्स को प्रोसेस करने की कोशिश करता है। अच्छा नहीं।
एक Sidekiq कतार से जॉब्स हटाने वाले कोड स्निपेट ढूंढना आसान है। लेकिन हमारे पास *बहुत सारी* कतारें हैं। मैं उन सभी से जॉब्स साफ़ करना चाहता हूँ। थोड़ी खुदाई के बाद, मुझे एक उत्तर मिला जो अच्छा काम करता प्रतीत होता है। निहारना!
# मेरे पास यहां मूल रूप से कोड का एक अधिक वर्बोज़ टुकड़ा था लेकिन mperham, Sidekiq के निर्माता, ने मुझे सीधे सेट कर दिया :) Sidekiq::Queue.all.each(&:clear)
इसके बारे में जाने के अधिक सीधे तरीके हैं, लेकिन यह केवल Sidekiq के सार्वजनिक API में परिभाषित मेथड्स का उपयोग करता है, इसलिए उम्मीद है कि यह काम करता रहेगा भले ही इंटर्नल बदल जाएं।
अब और अधिक इमोजी के साथ!
यदि आप Sidekiq स्रोत का ध्यानपूर्वक पढ़ते हैं, तो आप देख सकते हैं कि आप clear मेथड को आह्वान करने के लिए 💣 इमोजी का उपयोग कर सकते हैं। मजाक नहीं:
# https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/api.rb#L255 alias_method :💣, :clear
तो हम अपने "सभी कतारें साफ़ करें" कोड को इस तरह लिख सकते हैं:
Sidekiq::Stats.new.queues.each { |k, v| Sidekiq::Queue.new(k).💣 }
और चूंकि इमोजी इतने कूल हैं, हम अपने स्वयं के 💀 मेथड को बना सकते हैं जो सामूहिक विलोपन करता है।
def 💀 Sidekiq::Stats.new.queues.each { |queue_name, _| Sidekiq::Queue.new(queue_name).💣 } end