Tại Honeybadger, dùng Sidekiq nhiều, và nó tuyệt. Nhưng có một vấn đề thường gặp.
...Thấy, tôi không thường chạy Sidekiq khi development. Nhưng trong manual testing, gây ra nhiều job enqueued. Lần sau chạy Sidekiq, nó xử lý tất cả job đó. Không tốt.
Dễ tìm code snippet xóa job từ một Sidekiq queue. Nhưng chúng ta có nhiều queue. Muốn xóa job từ tất cả. Sau khi đào một chút, tìm ra cách làm tốt. Này!
# Ban đầu code verbose hơn nhưng mperham, tác giả Sidekiq, chỉ đúng :)
Sidekiq::Queue.all.each(&:clear)
Có cách direct hơn, nhưng cách này chỉ dùng method public API của Sidekiq, hy vọng vẫn work khi internal thay đổi.
Thêm emoji!
Đọc kỹ sidekiq source, nhận ra có thể dùng emoji 💣 invoke method clear. Không đùa:
# https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/api.rb#L255
alias_method :💣, :clear
Viết lại code "clear all queues":
Sidekiq::Stats.new.queues.each { |k, v| Sidekiq::Queue.new(k).💣 }
Vì emoji cool, tự làm method 💀 xóa hàng loạt.
def 💀
Sidekiq::Stats.new.queues.each { |queue_name, _| Sidekiq::Queue.new(queue_name).💣 }
end