如何在使用延迟作业时为特定队列指定一名工作人员?我知道我可以运行这个命令:
# 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,所以我们正在使用一个将运行我们的worker的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,其他工作人员在其他队列上工作。
我该如何做到这一点?
答案 0 :(得分:4)
如果您查看Heroku的Process Types and the Procfile
文档,最后会看到this示例:
例如,使用Ruby,您可以运行两种类型的队列工作程序 消耗不同的队列:
worker: env QUEUE=* bundle exec rake resque:work
urgentworker: env QUEUE=urgent bundle exec rake resque:work
延迟作业使用类似于Resque的东西。它使用env变量QUEUE或QUEUES来指定该特定worker的队列。
您可以在lib/delayed/tasks.rb
source code上验证该内容。