Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

วิธีล้างคิว Sidekiq ทั้งหมดโดยใช้พลังของอีโมจิ

ที่ Honeybadger เราใช้ Sidekiq บ่อยๆ และดีมาก แต่มีปัญหาหนึ่งที่ฉันพบบ่อย

...คุณเห็นไหม ปกติฉันไม่ได้เรียกใช้ Sidekiq เมื่อฉันอยู่ในระหว่างการพัฒนา แต่ในระหว่างการทดสอบด้วยตนเอง ฉันต้องจัดคิวงานจำนวนมาก ครั้งหน้าฉันจะทำ เรียกใช้ Sidekiq โดยพยายามประมวลผลงานเหล่านั้นทั้งหมด ไม่ดี

ง่ายต่อการค้นหาข้อมูลโค้ดที่จะลบงานออกจากคิว Sidekiq หนึ่งคิว แต่เรามี ล็อต ของคิว ฉันต้องการเคลียร์งานจากพวกเขาทั้งหมด หลังจากขุดค้นเล็กน้อย ฉันก็ได้คำตอบที่ดูเหมือนว่าจะใช้ได้ผลดี ดูเถิด!

# I originally had a more verbose piece of code here but mperham, Sidekiq's creator, set me straight :)

Sidekiq::Queue.all.each(&:clear)

มีวิธีดำเนินการโดยตรงมากกว่านี้ แต่วิธีนี้ใช้เฉพาะวิธีการที่กำหนดไว้ใน API สาธารณะของ Sidekiq ดังนั้นหวังว่ามันจะทำงานต่อไปแม้ว่าการเปลี่ยนแปลงภายในจะเปลี่ยนไป

ตอนนี้มีอีโมจิเพิ่มแล้ว!

หากคุณอ่านแหล่งข้อมูล sidekiq อย่างระมัดระวัง คุณอาจสังเกตเห็นว่าคุณสามารถใช้ 💣 อีโมจิเพื่อเรียกใช้วิธีการที่ชัดเจนได้ ไม่มีเรื่องตลก:

# 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