2011-01-05 36 views
0

我有兩個問題:的Heroku,cron的,delayed_job的職工(Rails 3中)

  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

回答

2

要添加刪除/刪除工人,掛接到你的ORM的經過:創建/後:摧毀

用的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 
+0

只是要小心這樣做,因爲你可以殺死一個當前在你的破壞塊後有工作的工人。目前沒有辦法只殺死失業工人。 – iwasrobbed 2011-06-28 15:57:44

+0

您可以將工作完成後發生的破壞代碼移動到後面,然後關閉該工作人員。不知道如何做到這一點.. – baash05 2012-03-14 05:10:48

4

我有很好的成功與HireFire

設置簡單:

  • 添加gem 'hirefire'到你的Gemfile
  • 創建Rails.root/config/initializers/hirefire.rb與配置信息。