2010-09-02 16 views

Respuesta

4

Creo que cron es una herramienta mejor para esto que el trabajo demorado. Lo he usado en un proyecto anteriormente, y realmente se destaca al correr en la tarea en segundo plano o en un momento determinado. Pero, para las tareas recurrentes que ocurren a intervalos regulares, creo que cron es la mejor herramienta.

Salida whenever (y su Railscast) para programar fácilmente tareas cron que se pueden ejecutar tareas rake (o Thor, o scripts de shell, o cualquier otra cosa.) Puede utilizar las tareas rastrillo para actualizar sus modelos y luego tener algún tipo del tablero de mandos que mira los diferentes estados.

21

Trabajé en un proyecto que intentó usar DelayedJob para programar artículos futuros. Apestaba

lugar le recomiendo que utilice la gema siempre:

http://github.com/javan/whenever

Siempre es una gema Ruby que proporciona una sintaxis clara para la definición de las tareas cron. Muestra sintaxis cron válida y puede incluso escribir su archivo crontab por usted. Está diseñado para funcionar bien con aplicaciones Rails y se puede implementar con Capistrano. Siempre que trabaje bien de forma independiente también.

código es el siguiente (de github)

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 

    every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot 
    runner "SomeModel.ladeeda" 
    end 

    every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday 
    runner "Task.do_something_great" 
    end 

Here 's un video Railscast sobre cómo usarlo.

Y el correspondiente ASCIICast.

+0

¿Por qué/cómo se retrasó el trabajo por usted? – sscirrus

+1

Descubrí que los trabajadores de DJ se congelaban constantemente y que era difícil seguir corriendo. Desde entonces he cambiado a Sidekiq y nunca miré hacia atrás. Es perfecto. Funciona absolutamente fantásticamente Desearía que mi compañía ahorrara el dinero por la funcionalidad adicional de Sidekiq Pro solo porque es increíble. – cpuguy83

+1

Sí chupa. Yo también estuve allí. – OneChillDude

2

Siempre funciona bien.

También me gusta rufus-scheduler

/config/initializers/task_scheduler.rb 

Luego, en ese archivo:

scheduler = Rufus::Scheduler.start_new 

scheduler.every("1m") do 
    DailyDigest.send_digest! 
end 

originalmente publicada encontraron esta here

Yo lo he probado y funciona bien.

actualización

Ahora que miro hacia atrás en ese enlace es más o menos la única empresa de rieles que me gustaría trabajar. Han hecho algunas gemas y agregan mucho a la comunidad. ¡Sin mencionar que tienen un gran equipo!

3

También puede utilizar la gema ClockWork: https://github.com/adamwiggins/clockwork-rails-dj

mecánica se ejecuta como un demonio separado y se puede utilizar para activar los trabajos de cualquier tipo que sea a agregarse a un sistema de cola de trabajo o ejecute de inmediato.

Uso Delayed_Job por lo que es bueno para un sistema de colas de trabajo que puede ser distribuido a través de múltiples nodos (o no). Use algo más para agregar trabajos a la cola en el momento adecuado.

Estaba usando rastrillo (o corredor)/cron/always joya para programar tareas en segundo plano, pero estaba encontrando que mi carga de servidor era tan alta porque me golpeaban constantemente con rake/runner cargando el entorno de rieles. Los trabajadores de Delayed_Job son sus demonios de rieles que se mantienen en ejecución, por lo que no está constantemente disparando Rails cada vez que se requiere una tarea en segundo plano.

-1

he creado una joya para esto:

https://github.com/sellect/delayed_cron

Funciona con sidekiq y delayed_job actualmente. Buscando agregar resque pronto. Sé que esto es un poco tarde, pero hace exactamente lo que estabas buscando.

+0

La gema delayed_cron no funcionó correctamente con delayed_job desde al menos el 2014-03-06. Incluso después de corregir DelayedCron :: Jobs :: DelayedJob #, la gema aún no funciona correctamente: las tareas cron con un intervalo no se reprograman (tanto si el trabajo se completó correctamente o no). – cydparser

+0

@cydparser Personalmente, no utilizo el método demored_job como procesador de fondo con delayed_cron, prefiero sidekiq. Sin embargo, ha habido actualizaciones de la clase DelayedJob dentro de delayed_cron en las versiones 0.2.2 y 0.2.3. ¿Qué versión de la gema estás usando? De cualquier forma, tengo la intención de actualizar demoda_cron para que use ActiveJob de Rail para abstraer los adaptadores de trabajo, de modo que la compatibilidad con diferentes procesadores en segundo plano no sea un problema en el futuro. – jGRUBBS

Cuestiones relacionadas