Heroku, Cron, Atard_job e trabalhadores (Rails 3)
-
25-09-2019 - |
Pergunta
Eu tenho duas perguntas:
- Como posso adicionar um trabalhador da Heroku antes de executar um trabalho atrasado e removê -lo depois que ele terminar?
- Meu cron.rake está 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
eu uso COLECTIONIDEA ATONDED_JOB.
Solução
- Talvez você possa usar um plug -in de "autoscala" como trabalhe menos ou Heroku-AutoScale.
- Sobre o cron, não vejo nenhum problema nele ...
Outras dicas
Eu tive um bom sucesso com Hirefire.
Fácil configuração:
- Adicionar
gem 'hirefire'
para o seu gemfile - Crio
Rails.root/config/initializers/hirefire.rb
com as informações de configuração.
Para adicionar Remover / Remover Trabalhadores, conecte -se aos seus ORM depois: Criar / depois: Destrua
Com o DataMapper no Heroku, eu fiz assim (você deve definir o Env Vars)
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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow