1

回复后找到了这个 gem Rack,上面写着:

Rack 应用程序的钩子,在发送响应后触发,客户端的套接字已关闭。这是执行可延迟、非后台任务(例如垃圾收集、统计信息收集、刷新日志等)而不影响响应时间的理想时间。

用法

只需将您的回调添加到env['rack_after_reply.callbacks'].

use Rack::ContentLength
use Rack::ContentType, 'text/plain'
run lambda { |env|
  env['rack_after_reply.callbacks'] << lambda { ... }
  [200, {}, ['hi']]
}

但我无法将它放入 Rails3 应用程序中。

谁能说出如何将它与 Rails3 应用程序一起使用?

4

2 回答 2

2

您需要在实际请求期间将回调添加到 Rack 环境,即在您的控制器中。

request您可以使用该对象访问 Rack 环境。

在您的控制器中:

def index #or whatever your method is, you could do this in filter
  #normal controller code...

  request.env['rack_after_reply.callbacks'] << lambda do
    $stderr.puts "Hello from callback"
  end
end

回调将在路由到此方法的任何请求之后运行。

于 2012-05-05T22:59:30.213 回答
0

只需config.middleware.use(new_middleware, args)在 application.rb 或特定 environment.rb 文件中添加这一行。

http://guides.rubyonrails.org/rails_on_rack.html#configuring-middleware-stack

于 2012-05-03T14:27:50.627 回答