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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top