5

Tengo una aplicación ejecutándose con apache + pasajero en producción. Actualmente inicializo el programador Rufus en un inicializador y registro trabajos leyendo desde un db en ese inicializador. La forma en que apache/pasajero funciona es que crea múltiples procesos/instancias de la aplicación que hacen que el planificador se inicialice varias veces y programe trabajos duplicados.Implementación del planificador Rufus en rieles 3

¿Cuál es el correcto de implementar esto para que el planificador sea un objeto singleton?

Respuesta

4

Es probable que desee implementar Rufus Scheduler como un proceso de trabajo independiente fuera de su aplicación.

En lugar de ponerlo como inicializador, implementaría una tarea de Rake que lo inicie.

# Rakefile 
desc "Starts the Scheduler worker" 
task :scheduler do 
    require 'path/to/your/scheduler/file' 

    scheduler.join 
end 

A continuación, sólo funcionan rake scheduler para iniciarlo en el fondo.


Bono: Debido a que su aplicación necesita lado a lado 2 procesos, utilizar capataz para gestionar los múltiples procesos de su aplicación. Usted puede hacer esto mediante la creación de un archivo llamado Procfile:

# Procfile 
web:  thin start -p 4242 
scheduler: rake scheduler 

continuación, iniciar su aplicación con Capataz: (asegúrese de gem install foreman primero)

$ foreman start 

Esto invocará ambos procesos simultáneamente.