2011-01-05 4 views
0

Ich habe zwei Fragen:Heroku, cron, delayed_job und Arbeiter (Rails 3)

  1. Wie kann ich einen Heroku Arbeiter hinzufügen, kurz bevor ein verzögertes Job läuft und entfernen Sie sie, nachdem sie beendet?
  2. Ist meine cron.rake ok?

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 

Ich benutze collectiveidea delayed_job.

Antwort

1
  1. Sie können vielleicht eine "automatische Skalierung" Plugin wie workless oder heroku-autoscale verwenden.
  2. über den cron ich irgendein Problem auf es nicht sehen ...
2

Entfernen Hinzufügen/Arbeiter entfernen, Ihre ORM nach einhaken: create/nach:

Mit DataMapper auf Heroku zerstören , ich habe es wie folgt aus (Sie müssen die ENV set vars selbst)

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

Sei einfach vorsichtig, denn du könntest einen Arbeiter töten, der gerade einen Job in deinem After-Destroy-Block hat. Derzeit gibt es keine Möglichkeit, arbeitslose Arbeitnehmer nur zu töten. – iwasrobbed

+0

Sie können den Destroy-Code nach dem Ausführen eines Jobs nach dem Job verschieben .. und dann diesen Worker herunterfahren. Ich bin mir nicht sicher, wie ich das erreichen soll. – baash05

4

ich habe mit HireFire guten Erfolg hatte.

Einfache Einrichtung:

  • hinzufügen gem 'hirefire' zu Ihrem Gemfile
  • erstellen Rails.root/config/initializers/hirefire.rb mit den Konfigurationsinformationen.