2012-06-07 7 views
5

utilizzando Rails 3.0.7, REE 1.8.7.esegue codice in rotaie dopo che la risposta è stata inviata al browser

Voglio eseguire il codice (in particolare, Garbage Collection) in Rails dopo che la risposta è stata inviata al browser.

C'è un modo per applicare patch su Rails/Rack/qualcosa in modo da poter chiamare GC.start subito dopo che la risposta è stata inviata al browser dal controller?

* Nota: questa non è una situazione in cui desidero utilizzare delayed_job o resque. Sono già a conoscenza di questi strumenti e non sono appropriati per questo caso d'uso. *

+0

Sono abbastanza sicuro che ci siano opzioni per la regolazione del garbage collector di Ruby che non comportano la necessità di applicare patch a Passenger. Potresti voler riscrivere la domanda per concentrarti su quello. Altrimenti lo faresti semplicemente in 'after_filter'. – tadman

+0

Stiamo già regolando GC, ma vorremmo eseguirlo anche al di fuori del ciclo req/response. – Raphael

+0

Inoltre, inserendolo in after_filter ritarderebbe la risposta all'utente: http://stackoverflow.com/questions/9437315/how-when-the-after-filter-works-runs – Raphael

risposta

0

È possibile farlo in Merb ma Rails non consente di farlo. Se tutto ciò di cui hai bisogno è chiamare il garbage collector, avvia una nuova discussione una volta che la richiesta è stata fatta e chiama il GC. In questo modo non ritardare la risposta all'utente e ottenere quello che vuoi.

Thread.new do 
    GC.start 
end 

Se avete veramente bisogno di fare questo, probabilmente si dovrebbe pensare a due cose, creando meno oggetti o in esecuzione su JRuby che ha molte più garbage collector in esecuzione.

+0

Il GC mark-and-sweep può funzionare in un thread separato? Sembra che lo spazio dell'oggetto cambierà mentre cercava di identificare le cose per la raccolta. – Raphael

+0

Ho provato questo e il mio spazio oggetti ha iniziato a crescere molto più velocemente del normale, non sono sicuro che il GC di Ruby possa funzionare correttamente in un thread separato. – Raphael

Problemi correlati