Heroku, cron, delayed_job e lavoratori (Rails 3)
-
25-09-2019 - |
Domanda
Ho due domande:
- Come si aggiunge un operaio Heroku poco prima di eseguire un lavoro ritardata e rimuoverlo dopo che è terminata?
- 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
Soluzione
- È forse possibile utilizzare un "autoscale" plugin come senza lavoro o Heroku-autoscale .
- 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