2011-02-22 12 views
5

Los observadores y las devoluciones de llamada en los modelos Rails operan en la misma secuencia y bloquean la solicitud hasta que regresen.¿Cómo se pueden manejar los observadores y las devoluciones de llamada de Rails de forma asíncrona (en un hilo diferente)?

Por ejemplo, si tengo un modelo de foto y pongo un trabajo de cambio de tamaño en la devolución de llamada after_create u observador, la solicitud no finaliza hasta que se realiza una entrada en la cola (que a veces puede ser lenta si estoy usando Amazon SQS para hacer cola).

Lo mismo vale para los controles Callbacks on Rails. Si tengo que ejecutar tareas de mantenimiento como administración de caché o análisis de tienda, la solicitud no finaliza hasta que finaliza la devolución de llamada.

¿Existe alguna forma de que Rails ejecute el código dentro de una devolución de llamada (Modelo o Controlador) u observador en un hilo diferente para que la solicitud no se bloquee?

Respuesta

2

Un par de las formas populares para ejecutar código en el fondo fuera del ciclo de petición/respuesta es actualmente delayed_job y resque

delayed_job utiliza su base de datos para poner en cola trabajos de procesamiento de fondo, y resque utiliza Redis.

He utilizado ambos y ambos funcionan muy bien, lea la documentación para ver cuál se adapta mejor a su caso.

Esto no hace que sus observadores y devoluciones de llamada se ejecuten automáticamente en segundo plano, pero hace que sea más fácil hacerlo, y más. Esta técnica está muy extendida y la producción se pone a prueba en la comunidad de Rails.

+0

Gracias, buena idea. Utilizo Amazon SQS para tercerizar la funcionalidad de delayyed_jobs o resque para no tener que hacer ping a mi base de datos constantemente mientras uso el método demorado_job o setup redis mientras uso resque. Amazon SQS funciona de manera brillante, pero a veces hay un pequeño retraso para volver a conectarse al servidor SQS. – Sid

+0

También consulte [sidekiq] (https://github.com/mperham/sidekiq), que es el más rápido, y ofrece soporte comercial si lo necesita. –

Cuestiones relacionadas