Sidekiq'teki tüm işler nasıl silinir?


119

Rails uygulamasında arka plan görevleri için sidekiq kullanıyorum. Şimdi iş sayısı artıyor, bu yüzden tüm işleri temizlemek istiyorum. Konsolda aşağıdaki komutu denedim

Sidekiq::Queue.new.clear

ama şu hata veriyordu.

NameError: uninitialized constant Sidekiq::Queue 

Tüm işleri sidekiq'ten nasıl silebilirim?


include 'sidekiq'önce dene
Benj

@BenjaminSinclaire veren TypeError: yanlış argüman türü String (beklenen Modül)
Can

3
require 'sidekiq'önce dene
Uri Agassi

1
Her zaman (gerçekten her zaman) kafamı karıştırırım ve gerekli :)
Benj

Yanıtlar:



207

1077 sayısında yazdığı gibi veya noobsippets'te bu blogda bildirildiği gibi yapabilirsiniz.

Her ikisi de aşağıdakileri yapmamızı önerir ve raylar konsolunda yapılabilir:

Sidekiq.redis { |conn| conn.flushdb }


Bu, kullandığım Rails uygulamalarındaki kimlik doğrulamamı sıfırlıyor gibi görünüyor (bu, tanımlama bilgilerini HTTP istemcime geri kopyalamam gerektiği anlamına gelir). Bunu önlemenin bir yolu var mı?
intcreator

1
Merhaba Brandeamon. Redis'i projenizin oturumunu kontrol etmek için kullanıyor musunuz? Bu komutlar, redis'te depolanan tüm verileri "temizlemek" için olduğundan, ilişkisel veritabanlarındaki bir bırakma veritabanı veya bırakma tablosu ile eşdeğerdir.
jonathanccalixto

1
Oyları dikkate alınarak kabul edilen cevap bu olmalıdır.
M Habib

Bu redis-cli flushdb, redis'i rails sunucunuzdan ayrı bir sunucuda çalıştırmanızdan daha tahmin edilebilir şekilde çalışır. redis-cli flushdbHost ve port argümanlarını eklemem gerektiğini hatırlayana kadar neden işe yaramadığını merak ediyordum .
maurice

4
Bu yaklaşımla ilgili sorun, farklı hizmetler arasında aynı redis / elastik belleği paylaşıyorsanız, redis veritabanındaki diğer tüm verileri de temizleyecektir.
Charles Skariah

80

Sidekiq Jobs komutlarını temizle:

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
Tüm kuyrukları şununla da temizleyebilirsiniz Sidekiq::Queue.all.map(&:clear)... Yerel ayar veritabanınızı prod ile senkronize ettiğinizde kullanışlıdır 😅
escanxr

36

En son Sidekiq'ten itibaren, sadece havaya uçurun:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

Evet, hepsini temizleme komutu tam anlamıyla bir bomba emojisidir. Ayrıca için çalışır Sidekiq::RetrySet.

Ya da eğlenceli değilsen kullanabilirsin q.clear


1
OMG, bu da ne? @Xavier, .💣 adında bir yöntem var mı, lütfen bana bu yöntemle ilgili dokümanı yönlendirir misiniz (💣).
codemilan

2
@codemilan Bu blog gönderisine bakın: blog.honeybadger.io/…
Modus

Bende invalid byte sequence in US-ASCII (ArgumentError)yürütme üzerinde q.💣/:
Shankar Thyagarajan

21
redis-cli flushdb

Ayrıca kullanabilirsiniz redis-cli flushall


5
Bu yaklaşımla ilgili sorun, farklı hizmetlerde aynı redis / elastik belleği paylaşıyorsanız, bunun db'deki diğer tüm verileri de temizleyeceğidir.
Charles Skariah

13

Rails koşucusunu tek satırda kullanın

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

10

Tüm Sidekiq görevleri "Redis" e kaydedilir.

Bu komutla "Redis" i temizleyebilirsiniz

redis-cli flushall

8

Bunu tüm işleri temizlemek için kullanabilirsiniz

require 'sidekiq/api'

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



0

Bunun Sidekiq.redis { |conn| conn.flushdb }redis veritabanından tüm anahtarları kaldırdığını fark ettim . Aşağıdakileri kullanarak tüm sidekiq kuyruklarını temizlemenin daha güvenli bir yolu vardır redis-cli:

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

Aynısı Sidekiq API ile de elde edilebilir (bkz.Ravi Prakash Singh cevabı )

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.