如何将工作人员分成延迟工作+ heroku的工作池?

Dav*_*ave 6 ruby-on-rails heroku delayed-job

我的环境是rails 3.1,heroku bamboo stack,delayed_job_active_record,(https://github.com/collectiveidea/delayed_job)并尝试使用hirefire.(https://github.com/meskyanichi/hirefire) - 我可以看到delayed_job队列文档,但是如何在heroku上应用它?

我有一组最高优先级的任务,每小时就会产生一次,我需要投入3名工作人员,大约需要26分钟才能完成.在此期间,不太重要的背景任务需要继续,可能有1名工作人员致力于他们.

因此,我将优先级任务块设置为命名队列,例如'hourtask',然后为其他所有内容命名一个队列'everythingelse':)

问题是,我如何将heroku工作者专门用于特定队列?是否与文档中的环境变量有关?它说:

# Set the --queue or --queues option to work from a particular queue.
$ RAILS_ENV=production script/delayed_job --queue=tracking start
$ RAILS_ENV=production script/delayed_job --queues=mailers,tasks start
Run Code Online (Sandbox Code Playgroud)

但是我对heroku设置不太熟悉,想知道如何将它应用到我的heroku生产环境中?

Nei*_*ton 14

它在README for Delayed Job 3中:

DJ 3引入了Resque风格的命名队列,同时仍然保留了DJ风格的优先级.目标是提供一个系统,用于对由不同工作池进行工作的任务进行分组,这些工作池可以单独进行缩放和控制.

可以通过设置队列选项将作业分配到队列:

object.delay(:queue => 'tracking').method

Delayed::Job.enqueue job, :queue => 'tracking'

handle_asynchronously :tweet_later, :queue => 'tweets'
Run Code Online (Sandbox Code Playgroud)

script/delayed_job可用于管理将开始处理作业的后台进程.

为此,请将gem"守护进程"添加到Gemfile中,并确保已运行rails generate delayed_job.

然后,您可以执行以下操作:

$ RAILS_ENV=production script/delayed_job start
$ RAILS_ENV=production script/delayed_job stop

# Runs two workers in separate processes.
$ RAILS_ENV=production script/delayed_job -n 2 start
$ RAILS_ENV=production script/delayed_job stop

# Set the --queue or --queues option to work from a particular queue.
$ RAILS_ENV=production script/delayed_job --queue=tracking start
$ RAILS_ENV=production script/delayed_job --queues=mailers,tasks start
Run Code Online (Sandbox Code Playgroud)

通过设置QUEUE或QUEUES环境变量来处理队列.

QUEUE=tracking rake jobs:work
QUEUES=mailers,tasks rake jobs:work
Run Code Online (Sandbox Code Playgroud)

在Heroku上,在proc文件中,创建两个条目:

worker1: QUEUE=tracking rake jobs:work
worker2: QUEUES=mailers,tasks rake jobs:work
Run Code Online (Sandbox Code Playgroud)

并逐个扩展:

heroku ps:scale worker1=2 worker2=1 
Run Code Online (Sandbox Code Playgroud)

等等

  • 你需要在Cedar上使用这种东西(也适用于Rails 3.1). (2认同)