【问题标题】:Heroku, cron, delayed_job and workers (Rails 3)Heroku、cron、delayed_job 和工人(Rails 3)
【发布时间】:2011-01-05 09:36:32
【问题描述】:

我有两个问题:

  1. 如何在运行延迟作业之前添加 Heroku 工作器并在完成后将其删除?
  2. 我的 cron.rake 还好吗?

cron.rake:

desc "This task is called by the Heroku cron add-on"
task :cron => :environment do

  puts "requesting homepage to refresh cache"
  uri = URI.parse('http://something.com')
  Net::HTTP.get(uri)
  puts "end requesting homepage"

  puts "start sending daily mail"
  User.notified_today.each do |user|
    Delayed::Job.enqueue UserMailer.daily_mail(user).deliver
  end
  puts "end sending daily mail"

end

我使用collectiveidea delayed_job

【问题讨论】:

    标签: ruby-on-rails heroku delayed-job


    【解决方案1】:

    我在HireFire 上取得了很好的成功。

    简单设置:

    • gem 'hirefire' 添加到您的 Gemfile 中
    • 使用配置信息创建Rails.root/config/initializers/hirefire.rb

    【讨论】:

      【解决方案2】:

      要添加删除/删除工作人员,请在 :create / after :destroy 之后挂钩到您的 ORM

      在 Heroku 上使用 DataMapper,我是这样做的(您必须自己设置 ENV 变量)

      MAX_CONCURRENT_WORKERS = 5
      if ENV["HEROKU_APP"]  
        Delayed::Job.after :create do
          workers_needed = [Delayed::Job.count, MAX_CONCURRENT_WORKERS].min
          client = Heroku::Client.new(ENV['HEROKU_USERNAME'], ENV['HEROKU_PASSWORD'])
          client.set_workers(ENV['HEROKU_APP'], workers_needed)        
          puts "- Initialized Heroku workers for ZipDecoder"           
        end
      
        Delayed::Job.after :destroy do
          workers_needed = [Delayed::Job.count, MAX_CONCURRENT_WORKERS].min
          client = Heroku::Client.new(ENV['HEROKU_USERNAME'], ENV['HEROKU_PASSWORD'])
          client.set_workers(ENV['HEROKU_APP'], workers_needed)        
          puts "- Cleaned Up a Delayed Job for ZipDecoder ---------------------------------"
        end
      end
      

      【讨论】:

      • 请小心执行此操作,因为您可能会杀死当前在您的 after destroy 块中有工作的工人。目前没有办法只杀死失业工人。
      • 您可以在工作完成后将销毁代码移至发生后......然后关闭该工作人员。不知道如何做到这一点..
      【解决方案3】:
      1. 您也许可以使用“自动缩放”插件,例如 worklessheroku-autoscale
      2. 关于 cron 我没有看到任何问题...

      【讨论】:

        猜你喜欢
        • 2011-05-23
        • 2013-07-04
        • 2011-06-04
        • 1970-01-01
        • 2013-05-08
        • 2011-09-13
        • 1970-01-01
        • 2012-01-25
        • 2013-01-28
        相关资源
        最近更新 更多