如何在队列中为延迟作业指定一名工作人员

时间:2016-10-07 17:12:16

标签: ruby-on-rails ruby heroku delayed-job

如何在使用延迟作业时为特定队列指定一名工作人员?我知道我可以运行这个命令:

# 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,其他工作人员在其他队列上工作。

我该如何做到这一点?

1 个答案:

答案 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上验证该内容。