2012-06-07 11 views
5

Usar Rails 3.0.7, REE 1.8.7.ejecutar código en rails después de enviar la respuesta al navegador

Quiero ejecutar código (específicamente, recolección de basura) en Rails después de que la respuesta se haya enviado al navegador.

¿Hay alguna manera de parchear en Rails/Rack/algo para que pueda llamar a GC.start justo después de que se envía la respuesta al navegador desde el controlador?

* Nota: Esta no es una situación en la que quiero usar el método de trabajo demorado o resque. Ya conozco esas herramientas y no son apropiadas para este caso de uso. *

+0

Estoy bastante seguro de que hay opciones para sintonizar el recolector de basura de Ruby que no implica tener que parchar Passenger. Es posible que desee volver a escribir la pregunta para centrarse en eso. De lo contrario, simplemente lo harías en 'after_filter'. – tadman

+0

Ya estamos sintonizando GC, pero nos gustaría ejecutarlo fuera del ciclo de solicitud/respuesta también. – Raphael

+0

Además, colocarlo en after_filter retrasaría la respuesta al usuario: http://stackoverflow.com/questions/9437315/how-when-the-after-filter-works-runs – Raphael

Respuesta

0

Puede hacer esto en Merb pero Rails en sí mismo no le permite hacer eso. Si todo lo que necesita es llamar al recolector de basura, simplemente inicie un nuevo hilo una vez que se complete la solicitud y llame al GC. De esta forma, no demoras la respuesta al usuario y obtienes lo que deseas.

Thread.new do 
    GC.start 
end 

Si realmente necesita hacer esto, probablemente debería pensar en dos cosas, la creación de menos objetos o correr en JRuby que tiene una mejor ejecución del colector de basura.

+0

¿Puede el GC de marcaje y barrido ingenuo trabajar en un hilo separado? Parece que el espacio del objeto estaría cambiando mientras intentaba identificar elementos para la recolección. – Raphael

+0

Intenté esto y mi espacio de objetos comenzó a crecer mucho más rápido de lo normal, no estoy seguro si el GC de Ruby puede funcionar correctamente en un hilo separado. – Raphael

Cuestiones relacionadas