Agendador Heroku Resque
Pergunta
Eu tenho um aplicativo Ruby on Rails (1.9.2 e 3.2) em execução no Heroku com Redis/Resque que requer que uma tarefa rake seja enfileirada em intervalos regulares.No momento, estou executando 'heroku run rake update_listings' em minha máquina local uma ou duas vezes por dia... Gostaria de automatizar isso.Eu tentei a gema sempre, mas a tarefa não iniciava em segundo plano.O agendador Heroku parece ser a solução apropriada, mas estou confuso com o arquivo scheduler.rb.Eu tenho:
desc "This task is called by the Heroku scheduler add-on"
task :hourly_feed => :environment do
Rake::Task[update_listings].execute
end
Quando executei a tarefa :hourly_feed no console do Heroku Scheduler e verifiquei os logs do Heroku, vi vários dynos da web sendo ativados pelo Hirefireapp, mas a tarefa rake update_listings nunca foi invocada.
Atualizar:Desisti do resque_scheduler.Eu sou muito verde para fazer isso funcionar, então estou tentando usar o crontab e um arquivo script.Aqui está meu arquivo de script update.sh:
Rake::Task["update_listings"].execute
Eu configurei o cron usando o crontab-e e ele é executado a cada 5 minutos, mas recebo um erro nos logs de e-mail:
Projects/livebytransit/update.sh: line 1: Rake::Task[update_listings].execute: command not found
Parece que ele está encontrando meu arquivo de script update.sh e lendo-o, mas não está executando o código.Percebi que a entrada do log eliminou as aspas, então também tentei usar aspas simples no arquivo de script de shell, sem alterações.Também tentei alterar o update.sh para isto:
heroku run rake update_listings
erro voltou heroku: command not found
Solução 2
Acontece que o Heroku Scheduler funciona perfeitamente... Simplesmente esqueci as aspas em torno de "listagens atualizadas".
Outras dicas
Pessoalmente, usei o resque_scheduler, que adicionará trabalhos à fila resque/redis usando o cron.
resque_schedule.yml
count_delayed_jobs_job:
cron: "0 */1 * * *"
class: Support::CountDelayedJobsResque
queue: CDJ
args:
description: "count_delayed_jobs_job, every 1hr"
alternativamente, você poderia simplesmente atirar Rake::Task["update_listings"].execute
em um script de shell e use o crontab para acionar o trabalho.