Algo medio offtopic pero importante que está bueno tener en cuenta en estos
casos es que durante el request que estarías generando tu app se bloquea
hasta que recibe respuesta, y si es un servicio externo (y "servicio
externo" queda a definición de cada uno :D) no podés saber ni acotar cuánto
va a tardar, por lo que la respuesta de tu request queda atada a algo que no
controlás (y seguramente pueda llegar a ser considerable).

Esto puede provocar que tengas requests que superen el segundo (que es como
el threshold de alerta), ¡*y no es tu culpa*!; lo que implica que, dado que
casi todas las formas que tenés para servir apps en Rails son bloqueantes**,
si tenés una cantidad considerable de requests en ese action particular (el
que puede tardar), tu aplicación puede parecer colgada por que todos los
procesos están esperando respuesta de este servicio. Esto provoca que tu
server se encuentre prácticamente ocioso pero sin poder atender requests...

Conclusión: toda tarea que no podamos acotar en el tiempo (o que sí podamos,
pero supere una barrera de 1 segundo o lo que te parezca) deben ejecutarse
en diferido. Para esto tenés varias soluciones (Delayed::Job con su
send_later me gusta, también tenés Workling, BackgroundJob si no me
equivoco, uno más viejo es BackgrounDRB, etc).

Esto es más fácil decirlo que hacerlo. Conviene preverlo desde un principio.

Nacho

** nunca me metí con JRuby (JRuby tendría la posibilidad de utilizar
múltiples threads para atender requests, pero igualmente no es una solución
mágica tampoco)

2010/3/18 Mariano Ayesa <[email protected]>

> Holas
>
> Que tal?  Tengo que hacer lo siguiente, y como es la primera vez que
> lo hago.. necesito si me tiran una punta :)
>
> Desde un controller de Rails, tengo que preparar unos datitos y
> mandarlos via post a una url que no está en mi app, y dependiendo del
> response, hacer otras cosas en mi app..
>
> Googleando, encontré
>
> http://api.rubyonrails.org/classes/ActionController/Integration/Session.html
> pero no entiendo como usar esto desde mi controller..  (en caso que
> sea esa la solucion)
>
> Gracias,
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a