Domanda

Ho due domande:

  1. Come si aggiunge un operaio Heroku poco prima di eseguire un lavoro ritardata e rimuoverlo dopo che è terminata?
  2. Il mio 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

collectiveidea delayed_job .

È stato utile?

Soluzione

  1. È forse possibile utilizzare un "autoscale" plugin come senza lavoro o Heroku-autoscale .
  2. Il cron non vedo alcun problema su di esso ...

Altri suggerimenti

Ho avuto un buon successo con HireFire .

Installazione facile:

  • Aggiungi gem 'hirefire' al Gemfile
  • Crea Rails.root/config/initializers/hirefire.rb con le informazioni di configurazione.

Per aggiungere rimuovere / lavoratori rimuovere, gancio nel vostro ORM è dopo: creare / dopo: distruggere

Con DataMapper su Heroku, l'ho fatto come questo (È necessario impostare l'ENV vars da soli)

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top