У меня есть приложение, которое использует Sidekiq. Процесс веб-сервера иногда ставит работу на Sidekiq, но я не обязательно буду работать с рабочим. Есть ли утилита, которую я мог бы вызвать из консоли Rails, которая вытащила бы одну работу из очереди Redis и запустила подходящего работника Sidekiq?Как вручную запустить работу Sidekiq
ответ
Вы можете сделать это, используя класс Sidekiq::Queue
в консоли Rails.
Для выполнения задания:
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
Обратите внимание, что это не повлияет на очередь или статистику обрабатываемые 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}>
Чтобы удалить задание, просто ткнул от передней части очереди:
> 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}>
Если задание является почтовой программой, не забудьте добавить '.deliver' в' klass.send (method, * args) ' –
Это не сработает. 'queue.first.args [0]' is Hash, так почему я должен называть его 'YAML.load'? Кроме того, хеш не содержит ничего, что соответствует вашему набору 'klass, method, args'. –
Как уже упоминалось ранее, аргументы являются хешем, поэтому это не работает – Mike
я бы не пытаться взломать API sidekiq для запуска задания вручную, так как это может оставить некоторые нежелательные внутренние состояние, но я считаю, что следующий код будет работать
# 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
Пожалуйста, дайте мне знать, если это не работает, или если кто-то знает лучший способ сделать это.
- 1. Как запустить работу синхронно с sidekiq
- 2. Как я могу запустить работу Clockwork вручную?
- 3. Как вы собираетесь перепланировать работу в Sidekiq?
- 4. Как отредактировать работу в очереди sidekiq?
- 5. Вручную повторить работу в Delayed_job
- 6. Как запустить Datagridview.cellValidating вручную?
- 7. Как запустить событие «вручную»?
- 8. Как запустить Que работу
- 9. Sidekiq не поднимает работу с Rails-приложения
- 10. SQL, как сделать работу запустить работу?
- 11. рельсы, не удается запустить sidekiq
- 12. Запустить sidekiq из задачи рейка
- 13. Как Форман запустить sidekiq и mailcatcher
- 14. Как запустить rake db: мигрировать с sidekiq
- 15. Как убить фоновую работу в Resque как драгоценный камень sidekiq
- 16. Sidekiq активная работа, как запустить одну работу за раз? (non-concurrent run)
- 17. Как вручную запустить обновление CLLocationManager?
- 18. Как вручную запустить бутстрап «требуется»?
- 19. Buildbot: как вручную запустить сборку?
- 20. Как вручную запустить проверку весны?
- 21. Как запустить jQuery togglePanels вручную
- 22. Как вручную запустить транзакцию OrientGraph?
- 23. Как запустить Bootstrap Tour вручную?
- 24. Как запустить netbeans webapp вручную
- 25. Как запустить ручку Ratchet вручную?
- 26. Как запустить сервер tomcat вручную
- 27. Как остановить/прервать работу планировщика кварца вручную
- 28. Как начать работу с макетными представлениями вручную?
- 29. Как вручную запускать работу сервера quartz.net?
- 30. Как вручную запустить proguard в студии Android?
Сообщите нам, когда вы знаете – user1735921