Bagaimana cara menghapus semua pekerjaan dari Sidekiq?


119

Saya menggunakan sidekiq untuk tugas latar belakang di aplikasi Rails. Sekarang jumlah pekerjaan menjadi lebih banyak, jadi saya ingin menghapus semua pekerjaan. Saya mencoba perintah berikut di konsol

Sidekiq::Queue.new.clear

tapi itu memberikan kesalahan berikut.

NameError: uninitialized constant Sidekiq::Queue 

Bagaimana cara menghapus semua pekerjaan dari sidekiq?


coba include 'sidekiq'sebelumnya
Benj

@BenjaminSinclaire yang memberikan TypeError: jenis argumen yang salah String (Modul yang diharapkan)
Dapat

3
coba require 'sidekiq'sebelumnya
Uri Agassi

1
Saya selalu (benar-benar selalu) bingung memasukkan dan membutuhkan :)
Benj

Jawaban:



207

Anda dapat melakukan apa yang dikatakan pada masalah 1077 atau seperti yang dilaporkan di blog ini di noobsippets

Keduanya menyarankan kami melakukan hal berikut, dan dapat dilakukan di konsol rel:

Sidekiq.redis { |conn| conn.flushdb }


Ini tampaknya mengatur ulang otentikasi saya pada aplikasi Rails yang saya gunakan (yang berarti saya harus menyalin cookie kembali ke klien HTTP saya). Apakah ada cara untuk mencegahnya?
intcreator

1
Halo, Brandeamon. Apakah Anda menggunakan redis untuk mengontrol sesi proyek Anda? Karena perintah ini adalah untuk "membersihkan" semua data yang disimpan di redis, ini setara dengan drop database atau drop table di database relasional.
jonathanccalixto

1
Ini harus menjadi jawaban yang diterima mengingat suaranya.
M. Habib

Ini bekerja lebih dapat diprediksi daripada redis-cli flushdbjika Anda menjalankan redis di server terpisah dari server rel Anda. Saya bertanya-tanya mengapa redis-cli flushdbtidak berhasil sampai saya ingat saya perlu memasukkan argumen host dan port.
Maurice

4
Masalah dengan pendekatan ini adalah jika Anda berbagi redis / elasticache yang sama di layanan yang berbeda, semua data lain di db redis juga akan dihapus.
Charles Skariah

80

Hapus perintah 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
Anda juga dapat menghapus semua antrian dengan Sidekiq::Queue.all.map(&:clear)... Berguna bila Anda menyinkronkan db lokal Anda dengan prod 😅
escanxr

36

Untuk Sidekiq terbaru, ledakkan saja:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

Ya, perintah untuk menghapus semua secara harfiah adalah emoji bom. Juga bekerja untuk Sidekiq::RetrySet.

Atau jika Anda tidak menyenangkan, Anda dapat menggunakannya q.clear


1
OMG, apa ini? @Xavier, apakah ada metode bernama .💣, dapatkah Anda memandu saya dokumen tentang metode ini (💣).
codemilan

2
@codemilan Lihat posting blog ini: blog.honeybadger.io/…
Modus Tollens

Saya mulai invalid byte sequence in US-ASCII (ArgumentError)mengeksekusi q.💣: /
Shankar Thyagarajan

21
redis-cli flushdb

Anda juga bisa menggunakan redis-cli flushall


5
Masalah dengan pendekatan ini adalah jika Anda berbagi redis / elasticache yang sama di layanan yang berbeda, semua data lain di db juga akan dihapus.
Charles Skariah

13

Gunakan pelari Rails dalam satu baris

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

10

Semua tugas Sidekiq disimpan di "Redis".

Anda dapat membersihkan "Redis" dengan perintah ini

redis-cli flushall

8

Anda dapat menggunakan ini untuk membersihkan semua pekerjaan

require 'sidekiq/api'

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



0

Saya menyadari bahwa Sidekiq.redis { |conn| conn.flushdb }menghapus semua kunci dari database redis. Ada cara yang lebih aman untuk menghapus semua antrian sidekiq menggunakan redis-cli:

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

Hal yang sama dapat dicapai dengan API Sidekiq (lihat jawaban Ravi Prakash Singh )

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.