2012-10-09 33 views
6

Tengo un controlador de rieles en Heroku donde envío correos electrónicos en un bucle, y respondo al usuario con cierta información sobre a qué dirección de correo electrónico se enviaron los correos electrónicos.Prevenir el tiempo de espera de solicitud con peticiones largas

Si bien esto funciona cuando solo se deben enviar unos pocos (~ 40) correos electrónicos, la solicitud se agota cuando hay más que enviar unos pocos correos electrónicos (por ejemplo,> 40).

estados heroku en sus guías que las solicitudes deben responder con al menos un byte dentro de los 30 segundos: https://devcenter.heroku.com/articles/request-timeout

Aunque sé que esto no es la mejor manera de lograr esto, estoy actualmente tratando de encontrar la manera de haz esto en Ruby.

Si se tratara de una aplicación de PHP, podría hacer un echo antes de ingresar al ciclo, y luego mantener echo haciendo algo en cada iteración. ¿Cómo logro algo similar en los rieles?

Respuesta

4

Su mejor opción es no enviar el correo antes de devolver la respuesta. Tendrás más suerte al agregar el trabajo a una de las muchas colas de trabajo disponibles de Heroku, y luego irás a una página de monitoreo que muestra el progreso del trabajo y se actualiza periódicamente. Si está tratando de evitar el uso de uno de esos servicios de cola, por razones presupuestarias, es posible que pueda lograr lo mismo utilizando un nuevo hilo, en lugar de una cola. De cualquier manera, esta técnica escalará mejor, y también será capaz de recuperarse de la falla más fácilmente.

Como parece que ya sabe que su solución propuesta no es la solución ideal, también intentaré responder a su pregunta exacta. Puede hacer que la transmisión HTTP funcione para esto. Yo recomendaría visitar http://railscasts.com/episodes/266-http-streaming.

+0

Gracias. De hecho, estaba tratando de evitar pagarle a las dinas trabajadoras de Heroku. – rdasxy

+0

Sí, esos complementos se suman rápidamente. –

+1

Puede consultar https://github.com/lostboy/workless para obtener un presupuesto ajustado para los trabajadores. –

Cuestiones relacionadas