【问题标题】:schedule rufus-scheduler onto worker dyno on heroku将 rufus-scheduler 调度到 heroku 上的 worker dyno
【发布时间】:2014-12-12 12:24:54
【问题描述】:

我想使用 rufus-scheduler 来运行后台任务。我目前有一个用于 Sidekiq 的工作人员测功机,理想情况下只是想安排该过程。根据https://github.com/jmettraux/rufus-scheduler#so-rails的文档测试 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

它同时出现在网络和工作进程中,我希望它使用工作进程。我将如何实现这一目标?

示例输出为:

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

【问题讨论】:

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


    【解决方案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) 来识别您使用的是哪个测功机。

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

    【讨论】:

    • thx ,这就是问题所在,我如何确定哪个进程正在调用调度程序?我很确定工人测功机不会睡觉。但如果您有更多信息,将不胜感激。在网络方面,我使用的是 2x Web Dyno,我认为它不会进入睡眠状态。
    • 我认为确实如此,但每个人都有权发表意见
    • 这个问题可以缩减为“在 Heroku 上,我如何确定我是在 web dyno 上还是在 worker dyno 上?”。
    猜你喜欢
    • 2014-05-24
    • 2014-03-11
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2012-03-08
    相关资源
    最近更新 更多