Un trabajo cron para rieles: ¿mejores prácticas?

Resuelto jes5199 asked hace 15 años • 21 respuestas

¿Cuál es la mejor manera de ejecutar tareas programadas en un entorno Rails? ¿Guión/corredor? ¿Rastrillo? Me gustaría ejecutar la tarea cada pocos minutos.

jes5199 avatar Nov 13 '08 05:11 jes5199
Aceptado

He usado el extremadamente popular Whenever en proyectos que dependen en gran medida de tareas programadas, y es genial. Le brinda un buen DSL para definir sus tareas programadas en lugar de tener que lidiar con el formato crontab. Del archivo LÉAME:

Siempre es una gema de Ruby que proporciona una sintaxis clara para escribir e implementar trabajos cron.

Ejemplo del archivo LÉAME:

every 3.hours do
  runner "MyModel.some_process"       
  rake "my:rake:task"                 
  command "/usr/bin/my_great_command"
end

every 1.day, :at => '4:30 am' do 
  runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end
Jim Garvin avatar Jun 16 '2011 20:06 Jim Garvin

Estoy usando el enfoque de rake (según lo respalda heroku )

Con un archivo llamado lib/tasks/cron.rake ..

task :cron => :environment do
  puts "Pulling new requests..."
  EdiListener.process_new_messages
  puts "done."
end

Para ejecutar desde la línea de comando, esto es simplemente "rake cron". Este comando se puede colocar en el cron/programador de tareas del sistema operativo según se desee.

¡ Actualice esta es una pregunta y respuesta bastante antiguas! Alguna información nueva:

  • el servicio cron heroku al que hice referencia ha sido reemplazado por Heroku Scheduler
  • para tareas frecuentes (especialmente cuando desea evitar el costo de inicio del entorno Rails), mi enfoque preferido es usar el cron del sistema para llamar a un script que (a) creará una API de webhook segura/privada para invocar la tarea requerida en segundo plano. o (b) poner directamente en cola una tarea en el sistema de cola de su elección
tardate avatar Jun 15 '2009 11:06 tardate