2011-09-06 16 views
8

Quiero ejecutar una tarea cada minuto en Heroku para verificar si se cumplen las condiciones para el tiempo de espera de ciertas tareas del usuario. Solo puedo ejecutar un cron de Heroku cada hora, así que ¿cuál es la mejor manera de configurar una tarea cronometrada como esta? Estoy usando Rails 3.1 en Heroku.programar un trabajo cada minuto Rails 3.1 en Heroku

Respuesta

7

Puede usar delayed_job con un trabajo de auto-reinicio con un :run_at. Algo algo así como esto:

class YourJob 
    def do_interesting_things 
     #... Do what needs to be done. 
     self.delay(:run_at => 1.minute.from_now).do_interesting_things 
    end 

    def self.start_me_up 
     new.do_interesting_things 
    end 
end 

Y a continuación, en algún momento durante la inicialización de la aplicación:

YourJob.start_me_up 
+0

gracias, intentaré eso hoy y si funciona, aceptaré la respuesta :-) –

+0

¿Funcionó? Necesito ejecutar una tarea de rake cada 1 minuto y estoy pensando que debería haber una manera de hacer que se ejecute solo frente a requerir cron. Actualmente cron en heroku tiene un máximo de cada hora. – ylluminate

+0

@ylluminate: nunca escuché de nuevo pero debería funcionar, pruébalo y cuéntame cómo funciona. –

8

A partir de hoy, se puede programar la gema, clockwork. Heroku oficialmente admite esto y puede encontrar su documentación here.

+0

Gracias fantásticos –

+3

Solo tenga en cuenta que [clockwork] (https://devcenter.heroku.com/articles/clock-processes-ruby) requiere un dinamómetro, por lo que costará lo mismo que cualquier otro tipo de dinamómetro ($ 0.05 por hora, facturable al segundo - aproximadamente ** $ 35/mes **). Aquellos que * no * requieren programar "cada minuto", pero están bien con * cada 10 minutos *, * cada hora *, o * todos los días (en un momento específico) *, luego considere el [Programador Heroku] (https : //addons.heroku.com/scheduler), un complemento gratuito. – user664833

+1

Otra limitación del mecanismo de relojería es que solo se puede ejecutar en un solo banco de pruebas, por lo que si tiene más trabajo programado de lo que puede manejar un solo proceso, la solución 'delayed_job' funcionará mejor. – Leopd