Sir*_*ins 5 ruby-on-rails delayed-job
我有一个延迟的作业队列,其中包含运行速度特别慢的任务,我希望由它自己的一组专用工作人员处理这些任务,因此它会阻碍其余工作人员管道的风险较小。
RAILS_ENV=production script/delayed_job --queue=super_slow_stuff start
但是,我还想要一个用于所有其他队列的通用工作池,希望不必单独指定它们(因为它们的名称等也经常更改/添加)。类似于:
RAILS_ENV=production script/delayed_job --except-queue=super_slow_stuff start
我可以使用通配符*字符,但我想这会导致第二个工人也接过超级慢的工作吗?
对此有何建议?
小智 1
您可以为应用程序的所有队列定义一个全局常量。
QUEUES={
mailers: 'mailers',
etc..
}
Run Code Online (Sandbox Code Playgroud)
然后在你的延迟方法调用中使用这个常量
object.delay(queue: QUEUES[:mailers]).do_something
Run Code Online (Sandbox Code Playgroud)
并尝试动态地构建delayed_job_args
system("RAILS_ENV=production script/delayed_job --pool=super_slow_stuff --pool:#{(QUEUES.values-[super_slow_stuff]).join(',')}:number_of_workers start")
Run Code Online (Sandbox Code Playgroud)