Pergunta

Eu tenho duas perguntas:

  1. Como posso adicionar um trabalhador da Heroku antes de executar um trabalho atrasado e removê -lo depois que ele terminar?
  2. 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.

Foi útil?

Solução

  1. Talvez você possa usar um plug -in de "autoscala" como trabalhe menos ou Heroku-AutoScale.
  2. 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
scroll top