wow the stratholme riendas reins osahendido muerte lord destrero deathcharger crimson carmesi baron aurius ahumado ruby-on-rails sidekiq

ruby-on-rails - the - riendas del destrero de la muerte carmesi



Borrar la cola del lateral (5)

Tengo este trabajador que corre para siempre.

class Worker include Sidekiq::Worker sidekiq_options queue: "infinity", retry: true def perform(params) # ... self.class.perform_in(30.seconds, params) end end

El problema es que yo cargué trabajadores en el arranque, como este. config/initializers/load_workers.rb

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

Usando esto para iniciar sidekiq SIDEKIQ=1 sidekiq --verbose --environment production -C config/sidekiq.yml .

Esto significa que los trabajadores antiguos se detienen, tanto los que se están ejecutando actualmente como los que están siendo reprogramados.

Intenté ejecutar esto en el inicio (justo antes de cargar nuevos trabajos), pero no funcionó.

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)

Después de las implementaciones 5-ish, hay un montón de trabajadores duplicados en la cola programada para más adelante. Entonces, ¿hay una manera de borrar todo en una cola e impedir que se reprogramen los trabajos en ejecución?

Estoy usando sidekiq 3.0.


Elimina todos los trabajos en una cola, eliminando la cola.

require ''sidekiq/api'' # for the case of rails console Sidekiq::Queue.new("infinity").clear Sidekiq::RetrySet.new.clear Sidekiq::ScheduledSet.new.clear


Esto hizo el truco para mí:

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


Funciona para mí para la mayoría de las versiones de sidekiq

Sidekiq::RetrySet.new.clear Sidekiq::ScheduledSet.new.clear

Borrar estadísticas (opcional)

Sidekiq::Stats.new.reset


Para eliminar todos los trabajos en cola. Vaya a la consola de Rails de su servidor de producción y simplemente ejecute este comando:

Sidekiq::Queue.new.clear

Matará a todos los trabajos en cola en sidekiq.


Puede borrar su cola ejecutando este código aunque habría métodos integrados.

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