Heroku, cron, delayed_job и рабочие (Rails 3) - PullRequest
0 голосов
/ 05 января 2011

У меня есть два вопроса:

  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

Я использую colleideidea delayed_job .

Ответы [ 3 ]

4 голосов
/ 22 мая 2011

У меня был хороший успех с HireFire .

Простая настройка:

  • Добавьте gem 'hirefire' в свой Gemfile
  • Создать Rails.root/config/initializers/hirefire.rb с информацией о конфигурации.
2 голосов
/ 20 мая 2011

Чтобы добавить удалить / удалить рабочих, подключитесь к ORM после: create / after: destroy

С DataMapper на Heroku я сделал это так (вы должны сами установить 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
1 голос
/ 05 января 2011
  1. Возможно, вы можете использовать плагин "autoscale", например без работы или heroku-autoscale .
  2. Насчет cron я не вижу проблемна нем ...
...