ที่ Honeybadger ใช้ Sidekiq เยอะ และมันดี แต่มีปัญหาหนึ่งที่ผมเจอบ่อย
...ผมไม่ค่อยรัน Sidekiq ตอน development แต่ manual testing ทำให้ jobs เยอะ enqueued ครั้งต่อไปรัน Sidekiq พยายาม process ทุก jobs ไม่ดี
หา code snippets ลบ jobs จาก one Sidekiq queue ง่าย แต่มาเรามี หลาย queues อยาก clear jobs จากทั้งหมด ขุดนิดหน่อยได้คำตอบที่ดู work ดี เปิดดู!
# I originally had a more verbose piece of code here but mperham, Sidekiq's creator, set me straight :) Sidekiq::Queue.all.each(&:clear)
มี direct ways มากกว่าแต่นี้ใช้แค่ methods ใน Sidekiq public API คงทำงานต่อแม้ internals เปลี่ยน
Now with More Emoji!
อ่าน sidekiq source อย่างระมัดระวัง สังเกตใช้ 💣 emoji เรียก clear method ได้ ไม่ได้เล่น:
# https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/api.rb#L255 alias_method :💣, :clear
เขียน "clear all queues" code ใหม่แบบนี้:
Sidekiq::Stats.new.queues.each { |k, v| Sidekiq::Queue.new(k).💣 }
Emoji's cool สร้าง 💀 method ของตัวเองทำ mass deletion:
def 💀 Sidekiq::Stats.new.queues.each { |queue_name, _| Sidekiq::Queue.new(queue_name).💣 } end