响应发送到浏览器后,在rails中执行代码

时间:2012-06-07 21:19:00

标签: ruby-on-rails garbage-collection

使用Rails 3.0.7,REE 1.8.7。

我希望在将响应发送到浏览器后在Rails中运行代码(特别是垃圾收集)。

有没有办法修补Rails / Rack /某些东西,以便我可以在从控制器将响应发送到浏览器后立即调用GC.start?

*注意:这不是我想使用delayed_job或resque的情况。我已经知道这些工具并且它们不适合这个用例。*

2 个答案:

答案 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 ,它有更好的垃圾收集器运行。