Làm thế nào để xóa tất cả các công việc khỏi sidekiq?


118

Tôi đang sử dụng sidekiq cho các tác vụ nền trong ứng dụng Rails. Bây giờ số lượng công việc trở nên nhiều hơn, vì vậy tôi muốn xóa tất cả các công việc. Tôi đã thử lệnh sau trong bảng điều khiển

Sidekiq::Queue.new.clear

nhưng nó đã đưa ra lỗi sau.

NameError: uninitialized constant Sidekiq::Queue 

Làm cách nào để xóa tất cả các công việc khỏi sidekiq?


thử include 'sidekiq'trước
Benj

@BenjaminSinclaire TypeError cho nó: loại sai lập luận String (dự kiến Module)
Can Can

3
thử require 'sidekiq'trước
Uri Agassi

1
Tôi luôn (thực sự luôn) nhầm lẫn bao gồm và đòi hỏi :)
Benj

Câu trả lời:



206

Bạn có thể làm như nó nói về vấn đề 1077 hoặc như được báo cáo trong blog này tại noobsippets

Cả hai đều đề xuất chúng tôi làm như sau và có thể được thực hiện trên bảng điều khiển rails:

Sidekiq.redis { |conn| conn.flushdb }


Điều này dường như đặt lại xác thực của tôi trên các ứng dụng Rails mà tôi đang sử dụng (có nghĩa là tôi phải sao chép lại cookie vào máy khách HTTP của mình). Có cách nào để ngăn chặn điều đó?
kẻ xâm nhập vào

1
Xin chào, Brandeamon. Bạn có đang sử dụng redis để kiểm soát phiên của dự án của mình không? Vì các lệnh này là để "làm sạch" tất cả dữ liệu được lưu trữ trong redis, nó tương đương với cơ sở dữ liệu thả hoặc bảng thả trong cơ sở dữ liệu quan hệ.
jonathanccalixto

1
Đây phải là câu trả lời được chấp nhận xem xét các phiếu bầu của nó.
M. Habib

Điều này hoạt động dễ đoán hơn so với việc redis-cli flushdbbạn đang chạy redis trên một máy chủ riêng biệt từ máy chủ rails của bạn. Tôi đã tự hỏi tại sao redis-cli flushdbkhông hoạt động cho đến khi tôi nhớ rằng tôi cần bao gồm các đối số máy chủ và cổng.
maurice

4
Vấn đề với cách tiếp cận này là nếu bạn đang chia sẻ cùng một redis /asticache trên các dịch vụ khác nhau, nó cũng sẽ xóa tất cả các dữ liệu khác trong redis db.
Charles Skariah,

80

Xóa các lệnh của Sidekiq Jobs:

require 'sidekiq/api'

# Clear retry set

Sidekiq::RetrySet.new.clear

# Clear scheduled jobs 

Sidekiq::ScheduledSet.new.clear

# Clear 'Dead' jobs statistics

Sidekiq::DeadSet.new.clear

# Clear 'Processed' and 'Failed' jobs statistics

Sidekiq::Stats.new.reset

# Clear specific queue

stats = Sidekiq::Stats.new
stats.queues
# => {"main_queue"=>25, "my_custom_queue"=>1}

queue = Sidekiq::Queue.new('my_custom_queue')
queue.count
queue.clear

3
Bạn cũng có thể xóa tất cả các hàng đợi với Sidekiq::Queue.all.map(&:clear)... hữu ích khi bạn đồng bộ hóa db locale của bạn với các sản 😅
escanxr

36

Kể từ Sidekiq mới nhất, chỉ cần làm nổ tung nó:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

Vâng, lệnh xóa tất cả đúng là một biểu tượng cảm xúc bom. Cũng hoạt động cho Sidekiq::RetrySet.

Hoặc nếu bạn không vui, bạn có thể sử dụng q.clear


1
OMG, cái quái gì thế này? @Xavier, có phương thức nào tên là .💣, bạn có thể vui lòng hướng dẫn tôi tài liệu về phương pháp này không (💣).
codemilan

2
@codemilan Xem bài đăng trên blog này: blog.honeybadger.io/…
Modus Tollens

Tôi đã invalid byte sequence in US-ASCII (ArgumentError)thực hiện q.💣: /
Shankar Thyagarajan

21
redis-cli flushdb

Bạn cũng có thể dùng redis-cli flushall


5
Vấn đề với cách tiếp cận này là nếu bạn đang chia sẻ cùng một redis /asticache trên các dịch vụ khác nhau, nó cũng sẽ xóa tất cả các dữ liệu khác trong db.
Charles Skariah,

13

Sử dụng trình chạy Rails trong một dòng

rails runner 'Sidekiq.redis { |conn| conn.flushdb }'

10

Tất cả các nhiệm vụ Sidekiq được lưu trong "Redis".

Bạn có thể xóa "Redis" bằng lệnh này

redis-cli flushall

8

Bạn có thể sử dụng điều này để xóa tất cả các công việc

require 'sidekiq/api'

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



0

Tôi nhận ra rằng Sidekiq.redis { |conn| conn.flushdb }xóa tất cả các khóa khỏi cơ sở dữ liệu redis. Có một cách an toàn hơn để xóa tất cả các hàng đợi sidekiq bằng cách sử dụng redis-cli:

redis-cli keys "*queue:*" | xargs redis-cli del

Điều tương tự cũng có thể đạt được với API Sidekiq (xem câu trả lời Ravi Prakash Singh )

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.