Xóa hàng đợi sidekiq


93

Tôi đã làm việc cho công nhân này mãi mãi.

class Worker
  include Sidekiq::Worker
  sidekiq_options queue: "infinity", retry: true

  def perform(params)
    # ...
    self.class.perform_in(30.seconds, params)
  end
end

Vấn đề là tôi tải công nhân khi khởi động, như thế này. config/initializers/load_workers.rb

Rails.application.config.after_initialize do  
  if ENV["SIDEKIQ"] == "1"
    Worker.perform_async({})
  end
end

Sử dụng điều này để bắt đầu sidekiq SIDEKIQ=1 sidekiq --verbose --environment production -C config/sidekiq.yml.

Điều này có nghĩa là những công nhân cũ sẽ dừng lại, cả những người hiện đang chạy nhưng cũng có những người đang được dời lại.

Tôi đã thử chạy cái này khi khởi động (ngay trước khi tải tác phẩm mới), nhưng không hiệu quả.

q = []
q += Sidekiq::RetrySet.new.select { |job| job.klass.match(/Worker/) }
q += Sidekiq::Queue.new("infinity").select { |job| job.klass.match(/Worker/) }
q += Sidekiq::ScheduledSet.new.select { |job| job.klass.match(/Worker/) }
q.each(&:delete)

Sau khi triển khai 5-ish, có nhiều nhân viên trùng lặp trong hàng đợi được lên lịch sau. Vì vậy, có cách nào để xóa mọi thay đổi trong một hàng đợi và ngăn việc lên lịch lại các công việc đang chạy không?

Tôi đang sử dụng sidekiq 3.0.


Bạn có muốn xóa một hàng đợi hay một công việc đã lên lịch. hoặc tốt hơn là nói công việc đã lên lịch trùng lặp.
Sabyasachi Ghosh

Tôi muốn xóa mọi dấu vết của công việc trước khi tải nhân viên mới.
Linus Oleander

ok, vấn đề của bạn .. có nghĩa là bạn muốn xóa tất cả các công việc đã lên lịch.
Sabyasachi Ghosh

@haSabyasachiGhosh Không, tôi muốn xóa mọi thông tin liên quan đến hàng đợi, không chỉ các công việc đã lên lịch. Nói cách khác; công việc không thành công, đang diễn ra, hàng đợi và đã lên lịch sẽ bị xóa.
Linus Oleander

Mọi trợ giúp đều có ở đây - github.com/mperham/sidekiq/wiki/API
viks

Câu trả lời:


161

Xóa tất cả Công việc trong Hàng đợi bằng cách xóa hàng đợi.

require 'sidekiq/api' # for the case of rails console

Sidekiq::Queue.new("infinity").clear
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear

Có thể Sidekiq Pro sẽ giúp bạn.
Ranjithkumar Ravi,

5
Dưới đây là để xóa các quầy Sidekiq::Stats.new.resettôi tìm ra rằng điều này giúp ra

14
Để xóa default / hàng đợi đầu tiên:Sidekiq::Queue.all.first.clear
user456584

1
Sidekiq :: Queue.new ("báo cáo"). Clear và Sidekiq :: Queue.new ("cảnh báo"). Clear giúp xóa hàng đợi hiện tại. Nhưng còn Bận thì sao? Làm cách nào để xóa công việc "Bận"?
Donato

31
Xóa tất cả chúng vớiSidekiq::Queue.all.each &:clear
Marco Lazzeri

95

Điều này đã làm cho tôi mẹo:

Sidekiq::Queue.all.each(&:clear)
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
Sidekiq::DeadSet.new.clear

1
Cảm ơn này làm việc như một nét duyên dáng tôi đã vào trường hợp khẩn cấp haha, các bạn nối khố là với waaaaaay quá nhiều công nhân trên hàng đợi này làm việc như tôi đã mong đợi kể từ khi tôi đang tìm kiếm killnhư lệnh
d1jhoni1b

Hoàn hảo, chỉ cần thêm rằng trong env của tôi, tôi phải sử dụng require 'sidekiq/api'bảng điều khiển để làm việc.
bonafernando

19

Hoạt động cho tôi cho hầu hết các phiên bản sidekiq:

Sidekiq::RetrySet.new.clear

Sidekiq::ScheduledSet.new.clear

Xóa thống kê (Tùy chọn)

Sidekiq::Stats.new.reset

Điều này sẽ xóa toàn bộ cơ sở dữ liệu, không chỉ hàng đợi.
Linus Oleander,

if sẽ xóa tất cả cơ sở dữ liệu của sidekiq và sẽ hoạt động tốt trong bảng điều khiển rails
vidur punj

-2

Bạn có thể xóa hàng đợi của mình bằng cách chạy mã này mặc dù sẽ có các phương thức tích hợp sẵn.

queue = Sidekiq::Queue.new
queue.each do |job|
  job.delete 
end

Chà, điều này sẽ hoạt động khi chúng tôi tìm nạp tất cả các công việc từ hàng đợi và sau đó xóa từng công việc một.
Asad Hameed

Không, không. Hãy xem các câu trả lời hiện có. Nó cũng là một bản sao của câu trả lời hiện có.
Linus Oleander

Tôi không biết bạn đang nói về cái gì. Bạn có thể vui lòng chỉ cho tôi câu trả lời giống như tôi đã đăng được không?
Asad Hameed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.