ruby on rails 3-rufus调度器和delayed_job on Heroku:为什么要使用worker



我正在开发一个Rails 3.2.16应用程序,并部署到一个Heroku开发帐户,该帐户有一个免费的网络dyno,没有工作dyno。我想确定是否真的需要一个(带薪)工人dyno。

该应用程序发送各种电子邮件。我使用delayed_job_active_record来排队并发送它们。

我还需要每分钟检查一次通知计数。为此,我使用了rufus调度器。

rufus调度器似乎能够在Heroku网络dyno中运行后台任务/线程

另一方面,我在delayed_job上所能找到的一切都表明它需要一个单独的工作进程。为什么?如果rufus调度程序可以在web dyno中运行守护进程,为什么delayed_job不能这样做?

我测试了以下内容来运行我的每分钟任务在delayed_jobs下工作,它似乎在单个Heroku web dyno中工作:

config/ininitializers/rufus scheduler.rb

require 'rufus-scheduler'
require 'delayed/command'
s = Rufus::Scheduler.singleton
s.every '1m', :overlap => false do # Every minute
  Rails.logger.info ">> #{Time.now}:  rufus-scheduler task started"
  # Check for pending notifications and queue to delayed_job
  User.send_pending_notifications
  # work off delayed_jobs without a separate worker process
  Delayed::Worker.new.work_off  
end

这似乎很明显,我想知道我是不是错过了什么?这是一种可以接受的处理延迟作业队列的方法,而不会增加单独工作进程的复杂性和费用吗?

更新

正如@jmettraux所指出的,Heroku将在一个小时后闲置一个不活动的网络dyno。我还没有设置它,但让我们假设我正在使用各种保持活力的方法之一来防止它睡觉:防止Heroku空转的简单方法?。

根据此

https://blog.heroku.com/archives/2013/6/20/app_sleeping_on_heroku

如果你的dyno一个小时都没有处理请求,他就会睡着。没有dyno,没有日程安排。

这也会有所帮助:https://devcenter.heroku.com/articles/clock-processes-ruby

相关内容

  • 没有找到相关文章

最新更新