使用Rails 3.0.7,REE 1.8.7。
我希望在将响应发送到浏览器后在Rails中运行代码(特别是垃圾收集)。
有没有办法修补Rails / Rack /某些东西,以便我可以在从控制器将响应发送到浏览器后立即调用GC.start?
*注意:这不是我想使用delayed_job或resque的情况。我已经知道这些工具并且它们不适合这个用例。*
答案 0 :(得分:1)
This one-line patch to passenger allows you to run GC between requests。实施后,我们看到我们的GC执行时间(由NewRelic报告)下降了大约40%。个别结果可能有所不同:)
感谢this post。
答案 1 :(得分:0)
您可以在Merb中执行此操作,但Rails本身不允许您这样做。如果你需要的只是调用垃圾收集器,只需在请求完成后启动一个新线程并调用GC。这样,您就不会延迟对用户的响应并获得您想要的结果。
Thread.new do
GC.start
end
如果你真的需要这样做,你应该考虑两件事,创建更少的对象或运行 JRuby ,它有更好的垃圾收集器运行。