2008-12-23 21 views
12

¿Cuál es la forma preferida de crear una tarea en segundo plano para una aplicación Rails? He oído hablar de Starling/Workling y del buen guión/corredor, pero tengo curiosidad por saber cuál es la forma defactada de gestionar esta necesidad.Spinning Background Tareas en Rails

Gracias!

aclaración: Me gusta la idea de rastrillar en segundo plano, pero el problema es que necesito algo que se ejecuta constantemente o cada 10 horas. No voy a poder darme el lujo de sentarme en una solicitud web, el servidor deberá iniciarla de forma asíncrona a las actividades que se lleven a cabo en mi sitio.

Respuesta

21

Ryan Bates creó tres grandes screencasts que realmente te pueden ayudar:

  1. Rake in Background
  2. Starling and Workling
  3. Custom Daemon

él habla de los pros y los contras para el uso de cada uno. Esto debería ayudarte a comenzar.

+0

+1 Para starling. Actualmente usándolo en producción. Es lo suficientemente rápido, confiable y tiene una base de código tan pequeña que puede comprenderlo fácilmente en pocos minutos. – Michael

0

Aunque no sé si se está convirtiendo en un estándar, he tenido un gran éxito con BackgroundRB. Tengo varios trabajadores, algunos son tareas de larga duración desencadenadas por una acción del usuario, mientras que otras se inician según un cronograma.

1

async_observer es el mejor. No hace todo tipo de cosas tontas de espera o pierden trabajos en accidentes de trabajo como starling, no hay sondeo de DB, etc ... y se integra notablemente bien en los rieles.

Empujo toneladas de trabajos a través de él y prácticamente no me importa.

5

Depende de sus necesidades.

Pruebe delayed_job, que es mantenido por Tobi, fundador de Shopify, y bifurcado por DHH.

3

Por lo general, confío en cronjob scheduling ya que brinda la flexibilidad sin tener que escribir un código por separado para programarlo. ¡Cualquier cosa que se pueda ejecutar desde el shell, se puede programar! Ya sea una secuencia de comandos (ruby/rake task/py/bash/cualquier otra que desee), la programación cronjob se puede lograr fácilmente.

Si se ejecuta en Windows, se puede utilizar scheduled tasks

Espero que esto ayude.

1

La mayoría de los complementos que se han mencionado harán el trabajo, pero si todo lo que necesita es ejecutar una tarea de Rake en un cronograma establecido, entonces realmente no hay necesidad de comenzar a arrojar más arquitectura.

Sólo añadir una tarea programada que se ejecuta

"cd/ruta/a/rieles/aplicación; RAILS_ENV = rastrillo producción de carreras: mi: tarea"

¿Por qué reinventar la rueda, cuando sistemas operativos tipo UNIX han estado ejecutando tareas en un horario durante décadas?

0

Eche un vistazo a Taskr. Básicamente es como cron, pero con una interfaz web RESTful. Puede usarlo para programar tareas para conectarse periódicamente a su aplicación Rails y desencadenar código arbitrario (a través del complemento Taskr4rails). Está pensado para encajar perfectamente en un sistema basado en servicios REST, además puede notificarle si una tarea devuelve un error, no se ejecuta, etc.