将rufus-scheduler安排到heroku上的worker dyno上

时间:2014-10-17 00:48:37

标签: ruby-on-rails heroku rufus-scheduler

我想使用rufus-scheduler运行后台任务。我目前有一个工人dyno为Sidekiq,理想情况下只是安排到这个过程。根据{{​​3}}

中的文档测试rufus-scheduler
require 'rufus-scheduler'

# Let's use the rufus-scheduler singleton
#
s = Rufus::Scheduler.singleton


# Stupid recurrent task...
#
s.every '1s' do
  Rails.logger.info "hello, it's #{Time.now}"
end

它出现在web和worker上,我希望它能够使用worker进程。我怎么做到这一点?

示例输出为:

2014-10-17T00:30:29.382689+00:00 app[web.1]: hello, it's 2014-10-17 00:30:29 +0000
2014-10-17T00:30:29.609192+00:00 app[worker.1]: hello, it's 2014-10-17 00:30:29 +0000

1 个答案:

答案 0 :(得分:1)

以下内容可以做到:

if running_on_worker_process? # you have to implement that one yourself.
  require 'rufus-scheduler'
  s = Rufus::Scheduler.singleton
  s.every '1d' do
    Rails.logger.info "taking out the garbage..."
  end
end

小心你的工作进程(dyno?)进入休眠状态(以及带有它的调度程序)。

编辑1

提示:您可以使用$ DYNO变量(https://devcenter.heroku.com/articles/dynos#local-environment-variables)来识别您正在使用的dyno。

if ENV['DYNO'].match(/^worker\./)
  # ...
end