#ruby-on-rails #ruby #heroku #delayed-job
#ruby-on-rails #ruby #heroku #отложенное задание
Вопрос:
Как я могу указать одного работника для определенной очереди при использовании отложенных заданий? Я знаю, что могу выполнить эту команду:
# Use the --pool option to specify a worker pool. You can use this option
# multiple times to start different numbers of workers for different queues.
# The following command will start 1 worker for the tracking queue,
# 2 workers for the mailers and tasks queues, and 2 workers for any jobs:
RAILS_ENV=production script/delayed_job --pool=tracking --pool=mailers,tasks:2 --pool=*:2 start
Но поскольку мы используем heroku, мы используем procfile, который будет запускать наших рабочих:
worker: bundle exec foreman start -f Procfile.workers
и наш рабочий файл запускает задания:
worker_1: bundle exec rake jobs:work
worker_2: bundle exec rake jobs:work
Однако я хочу сделать что-то вроде:
bundle exec rake jobs:work --queue=specific_queue
и только один работник работает над specific_queue, а другие работники работают над другими очередями.
Как я могу это сделать?
Комментарии:
1. мой ответ сработал для вас?
Ответ №1:
Если вы посмотрите на Process Types and the Procfile
документы Heroku, вы найдете этот пример в конце:
Например, используя Ruby, вы можете запускать два типа работников очереди, каждый из которых использует разные очереди:
worker: env QUEUE=* bundle exec rake resque:work
urgentworker: env QUEUE=urgent bundle exec rake resque:work
Отложенное задание использует нечто похожее на Resque. Он использует переменные env QUEUE или QUEUES, чтобы указать очередь для этого конкретного работника.
Вы можете проверить это в lib/delayed/tasks.rb
исходном коде.
Комментарии:
1. Это произошло. Спасибо
2. @jwill
worker: env QUEUE=* bundle exec rake resque:work
также будет обрабатывать срочную очередь?