Ho un'applicazione che utilizza Sidekiq. Il processo del server Web a volte inserisce un lavoro su Sidekiq, ma non necessariamente l'esecuzione del worker. Esiste un'utilità che potrei chiamare dalla console Rails che estrae un lavoro dalla coda Redis ed esegue l'operatore Sidekiq appropriato?Come eseguire manualmente un lavoro Sidekiq
risposta
È possibile eseguire questa operazione utilizzando la classe Sidekiq::Queue
nella console di Rails.
Per eseguire un lavoro:
queue = Sidekiq::Queue.new # access the default queue
job = queue.first # get the most recent job
klass, method, args = YAML.load(queue.first.args[0]) # unserialize
klass.send(method, *args) # run the code that the job would perform
Si noti che questo non influenzerà la coda o le statistiche gestiti da Sidekiq::Stats.new
.
> Sidekiq::Stats.new
=> #<Sidekiq::Stats:0x007fe7c74db8e8 @stats={:processed=>0, :failed=>0, :scheduled_size=>0, :retry_size=>0, :dead_size=>0, :processes_size=>1, :default_queue_latency=>1056925.2464652061, :workers_size=>0, :enqueued=>1}>
Per eliminare il lavoro che avete appena attizzò dalla parte anteriore della coda:
> queue.first.delete
=> true
> Sidekiq::Stats.new
=> #<Sidekiq::Stats:0x007fe7c74db8e8 @stats={:processed=>0, :failed=>0, :scheduled_size=>0, :retry_size=>0, :dead_size=>0, :processes_size=>1, :default_queue_latency=>1056925.2464652061, :workers_size=>0, :enqueued=>0}>
Se il lavoro è un mailer, non dimenticate di aggiungere '.deliver' a' klass.send (method, * args) ' –
Questo non funziona. 'queue.first.args [0]' è un hash, quindi perché dovrei chiamare 'YAML.load' su di esso? Inoltre, l'hash non contiene nulla che corrisponda alla tua 'klass, method, args' tuple. –
Come accennato prima, gli argomenti sono un hash, quindi questo non funziona – Mike
non vorrei cercare di incidere API sidekiq per eseguire i lavori manualmente dal momento che potrebbe lasciare un po 'interna indesiderati stato, ma credo che il seguente codice funzionerebbe
# Fetch the Queue
queue = Sidekiq::Queue.new # default queue
# OR
# queue = Sidekiq::Queue.new(:my_queue_name)
# Fetch the job
# job = queue.first
# OR
job = queue.find do |job|
meta = job.args.first
# => {"job_class" => "MyJob", "job_id"=>"1afe424a-f878-44f2-af1e-e299faee7e7f", "queue_name"=>"my_queue_name", "arguments"=>["Arg1", "Arg2", ...]}
meta['job_class'] == 'MyJob' && meta['arguments'].first == 'Arg1'
end
# Removes from queue so it doesn't get processed twice
job.delete
meta = job.args.first
klass = meta['job_class'].constantize
# => MyJob
# Performs the job without using Sidekiq's API, does not count as performed job and so on.
klass.new.perform(*meta['arguments'])
# OR
# Perform the job using Sidekiq's API so it counts as performed job and so on.
# klass.new(*meta['arguments']).perform_now
si prega di farmi sapere se questo non funziona o se qualcuno conosce un modo migliore per farlo.
- 1. Get sidekiq per eseguire un lavoro immediatamente
- 2. Come posso eseguire un lavoro in background continuo con Sidekiq?
- 3. Eseguire il lavoro sidekiq in modo sincrono
- 4. Come eseguire sidekiq nel server di produzione?
- 5. Eseguire Sidekiq come demone su Ubuntu
- 6. Il modo migliore per trovare un lavoro ovunque in Sidekiq
- 7. SQL come fare un lavoro eseguire un lavoro?
- 8. Rails: come riavviare sidekiq?
- 9. Eseguire un evento manualmente in JavaScript
- 10. Come eseguire automaticamente un lavoro Jenkins parametrizzato
- 11. Come eseguire uno script PowerShell come un lavoro in Jenkins
- 12. È possibile eseguire manualmente un controllo logrotate?
- 13. Come eseguire PREPARE TRANSACTION lavoro
- 14. Come far funzionare Sidekiq su Heroku?
- 15. Ruby on Rails + Sidekiq: Come cambio un orario di inizio del lavoro pianificato?
- 16. C'è un modo per dire sidekiq che un lavoro dipende da un altro
- 17. Come eseguire le richieste POST http/https manualmente?
- 18. Come costruire manualmente un AST?
- 19. Capistrano distribuire ma eseguire manualmente le migrazioni
- 20. Come eseguire il lavoro Sinatra in background?
- 21. Il modo migliore per monitorare il completamento di un lavoro Sidekiq?
- 22. Come eseguire RavenDb in Azure in un ruolo di lavoro
- 23. Come eseguire un semplice ripristino di lavoro su Git/EGit?
- 24. Come creare manualmente un tf.Summary()
- 25. Come richiamare manualmente un evento?
- 26. Come chiudere un jgrowl manualmente
- 27. metodi multipli per lavoratore sidekiq
- 28. Android Studio come eseguire la sincronizzazione gradle manualmente?
- 29. Come posso eseguire manualmente un'attività periodica di sedano dalla shell?
- 30. Eclipse: come installare un plugin manualmente?
fateci sapere quando sapete – user1735921