7

鉴于 Heroku Cedar 没有 Varnish 提供的 http 缓存,我想使用Rack::Cache. 有人告诉我,rails 3.1.1Rack::Cache默认情况下处于活动状态,我只需要确保在配置中具有:

config.action_controller.perform_caching = true

我需要选择一个缓存存储,对于我正在使用的这个实验:

config.cache_store = :memory_store

在我要缓存的页面的操作中,我添加了以下几行:

response.header['Cache-Control'] = 'public, max-age=300'
response.header['Expires'] = CGI.rfc1123_date(Time.now + 300)

此代码用于 Varnish,第一个请求将返回 200,随后(5 分钟)将返回一个304.

Rails 3.1 和 Heroku Cedar Stack 不会发生这种情况。我确实在响应中获得了这些标头,但后续请求返回 200 而不是 304。

我究竟做错了什么?谢谢你。

4

1 回答 1

11

正如您所指出的,Cedar 堆栈不使用 Varnish。这意味着 Web 请求将始终命中 ruby​​ 服务器。

考虑到这一点,Rack::Cache 将尊重您的标头并提供缓存的内容。

但是,由于请求实际上是通过 http 层进入 rails 应用程序,因此响应将始终为 200,因为缓存不再发生在 http 层。

要确认这是真的,请将其插入到您的缓存操作之一中:

<%= Time.now.to_i %>

然后,重新加载页面几次,您会注意到时间戳不会改变。

于 2011-11-18T21:04:54.247 回答