使用Rack :: Cache对Rails.app进行专门的服务器端缓存

时间:2012-05-03 16:06:50

标签: ruby-on-rails caching rack browser-cache

我有以下问题:我想在Redis中缓存操作的结果。出于这个原因,我使用https://github.com/jodosha/redis-rack-cache。 Rack :: Cache应该缓存一个动作的事实是通过在Rails中设置适当的HTTP头信息来确定的,例如:

response.headers['Cache-Control'] = 'max-age=3600, public, must-revalidate'

现在,Rack :: Cache将正确缓存Redis中的响应。但是,此标头还告诉浏览器缓存响应,我想要的!该请求应该仅在服务器端缓存。

作为一种解决方法,我正在替换nginx中的标头,我将其用作反向代理,但必须有更优雅的方式。有人知道怎么做吗?

祝你好运, 马丁

1 个答案:

答案 0 :(得分:1)

一种选择是编写位于Rack :: Cache之上的自己的中间件,然后从响应中删除这些Cache-Control标头。

简单的事情:

  def call(env)
    status, headers, body = @app.call(env)
    headers.delete("Cache-Control")
    [status, headers, body]
  end

可以作为中间件。