Mar*_*rry 5 heroku delayed-job rufus-scheduler ruby-on-rails-3
我正在开发一个Rails 3.2.16应用程序,并使用一个免费的网络dyno和没有工作人员dynos部署到Heroku开发帐户.我正在试图确定是否真的需要(付费)工人dyno.
该应用程序发送各种电子邮件.我使用delayed_job_active_record对它们进行排队并将它们发送出去.
我还需要每分钟检查一次通知计数.为此,我使用rufus-scheduler.
rufus-scheduler似乎能够在 Heroku web dyno中运行后台任务/线程.
另一方面,我在delayed_job上找到的所有内容都表明它需要一个单独的工作进程.为什么?如果rufus-scheduler可以在web dyno中运行守护进程,为什么delayed_job不能这样做呢?
我已经测试了以下内容,用于运行我的每分钟任务并处理delayed_jobs,它似乎在单个Heroku web dyno中工作:
配置/初始化/鲁弗斯-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
Run Code Online (Sandbox Code Playgroud)
这似乎很明显,我想知道我是否遗漏了什么?这是处理delayed_job队列的可接受方式,而不会增加单独的工作进程的复杂性和费用吗?
更新
正如@jmettraux所指出的,Heroku将在一小时后闲置一个不活动的网络dyno.我还没有设置它,但让我们假设我正在使用各种保持活动方法中的一种来防止它睡眠: 简单的方法来防止Heroku空转?.
根据这个
https://blog.heroku.com/archives/2013/6/20/app_sleeping_on_heroku
如果你的测功机一个小时没有处理请求,他就会进入睡眠状态。没有测功机,没有调度。
这也有帮助:https://devcenter.heroku.com/articles/clock-processes-ruby
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |