2012-03-26 14 views
5

Mi entorno es rails 3.1, heroku bamboo stack, retrayed_job_active_record, (https://github.com/collectiveidea/delayed_job) y experimentando con hirefire. (https://github.com/meskyanichi/hirefire) - Puedo ver la documentación de cola retrayed_job, pero ¿cómo puedo aplicar esto en heroku?¿Cómo separé a los trabajadores en grupos de trabajos con trabajo retrasado + heroku?

Tengo un conjunto de tareas de máxima prioridad que se generan cada hora a las que necesito dedicar 3 trabajadores, demora aproximadamente 26 minutos en completarse. Durante ese tiempo, las tareas de fondo menos importantes deben continuar, con tal vez 1 trabajador dedicado a ellas.

Así que voy a configurar ese bloque de tareas prioritarias para que estén en una cola con nombre, p. 'hourtask', y luego nombrar una cola para todo lo demás 'everythingelse' :)

La pregunta es, ¿cómo dedico a los trabajadores de heroku a colas específicas? ¿Tiene algo que ver con las variables de entorno según la documentación? Dice:

# Set the --queue or --queues option to work from a particular queue. 
$ RAILS_ENV=production script/delayed_job --queue=tracking start 
$ RAILS_ENV=production script/delayed_job --queues=mailers,tasks start 

, pero no estoy lo suficientemente familiarizado con la configuración heroku a encontrar la manera de aplicar esto a mi entorno de producción heroku?

Respuesta

14

Está en el README para empleo Delayed 3:

DJ 3 introduce al estilo Resque llamado colas al tiempo que conserva la prioridad de estilo DJ. El objetivo es proporcionar un sistema para que las tareas de agrupación trabajen en grupos separados de trabajadores, que pueden escalarse y controlarse individualmente.

Los trabajos pueden ser asignados a una cola estableciendo la opción de colas:

object.delay(:queue => 'tracking').method 

Delayed::Job.enqueue job, :queue => 'tracking' 

handle_asynchronously :tweet_later, :queue => 'tweets' 

script/delayed_job se puede utilizar para gestionar un proceso de fondo que empezará a trabajar fuera de puestos de trabajo.

Para hacerlo, agregue gem "daemons" a su Gemfile y asegúrese de ejecutar rails generate delayed_job.

entonces usted puede hacer lo siguiente:

$ RAILS_ENV=production script/delayed_job start 
$ RAILS_ENV=production script/delayed_job stop 

# Runs two workers in separate processes. 
$ RAILS_ENV=production script/delayed_job -n 2 start 
$ RAILS_ENV=production script/delayed_job stop 

# Set the --queue or --queues option to work from a particular queue. 
$ RAILS_ENV=production script/delayed_job --queue=tracking start 
$ RAILS_ENV=production script/delayed_job --queues=mailers,tasks start 

trabajo fuera de las colas de Definición de la cola o colas variable de entorno.

QUEUE=tracking rake jobs:work 
QUEUES=mailers,tasks rake jobs:work 

En Heroku, en su procfile, crear dos entradas:

worker1: QUEUE=tracking rake jobs:work 
worker2: QUEUES=mailers,tasks rake jobs:work 

y escalar de forma individual:

heroku ps:scale worker1=2 worker2=1 

etc

+0

Mi pregunta es si escalo a 4 trabajadores en heroku, cómo configuro 3 de ellos para que ejecuten named queue a, y 1 de ellos para que funcionen named named b, exclusivamente. – Dave

+0

respuesta actualizada. –

+0

"Procfile y los comandos de administración de procesos (heroku run y heroku scale) solo están disponibles en la pila Cedar". - Estoy en Bamboo, no estoy seguro de cómo configurar, pero no puedo usar procfile, ¿no crees? http: //devcenter.heroku.com/articles/procfile – Dave

1

pregunta original se le preguntó sobre HireFire también. En este momento, HireFire no es compatible con las colas con nombre (see HireFire website), lo que dificulta el escalado automático.

+0

Como actualización, HireFire _does_ ahora admite colas con nombre. Soy un cliente feliz de HireFire. Contrate cómo hacerlo aquí: http://hirefire.io/documentation/guides/rails-3-integration –

Cuestiones relacionadas