Rails3 - 如何在发送到浏览器的请求后处理过滤器

时间:2011-01-29 20:55:09

标签: ruby-on-rails ruby-on-rails-3 filter flush

我正在做一些自定义的请求缓存,并且我想在响应已经发送到服务器之后执行缓慢的“保存到磁盘”步骤。

标准的after_filter在响应发送到客户端之前运行。

根据rails系统的工作原理,这可能是不可能的,因为它只在完成处理请求时才发回数据。

从我发现的一些较旧的问题来看,似乎Rack中间件可能就是答案,但没有一个例子与远程相关,例如:https://github.com/rack/rack/wiki/List-of-Middleware

我还需要访问@response和params对象,但我认为这是可能的。

谢谢!

1 个答案:

答案 0 :(得分:0)

我无法理解你的目标。

如果缓存是一个透明存储数据的组件,以便可以更快地提供对该数据的未来请求,您应该担心尽快使缓存内容可用于将来的请求,即使这意味着要求第一个请求等待几毫秒才能发送响应。

如果在您的上下文中写入磁盘的速度太慢,您可以尝试使用Rails支持的其他缓存后端之一。

您还可以使用Resquedelayed_job添加后台作业;该作业将负责创建您的缓存,并将与响应异步。但同样,缓存的目的将与缓存的内容一起被遗漏。