sou*_*ein 7 ruby-on-rails heroku ruby-on-rails-3.1 rack-cache cedar
鉴于Heroku Cedar没有Varnish提供的http缓存我想使用Rack::Cache.我被告知rails 3.1.1 Rack::Cache默认处于活动状态,我只需要确保在配置中:
config.action_controller.perform_caching = true
Run Code Online (Sandbox Code Playgroud)
我需要选择一个缓存存储,对于我正在使用的这个实验:
config.cache_store = :memory_store
Run Code Online (Sandbox Code Playgroud)
在我要缓存的页面的操作中,我添加了以下行:
response.header['Cache-Control'] = 'public, max-age=300'
response.header['Expires'] = CGI.rfc1123_date(Time.now + 300)
Run Code Online (Sandbox Code Playgroud)
此代码用于与Varnish一起使用,第一个请求将返回200,随后(5分钟)将返回a 304.
Rails 3.1和Heroku Cedar Stack不会发生这种情况.我确实在响应中获得了这些标头,但后续请求返回200而不是304.
我究竟做错了什么?谢谢.
leo*_*ges 11
如您所述,Cedar堆栈不使用Varnish.这意味着Web请求将始终命中ruby服务器.
考虑到这一点,Rack :: Cache将尊重您的标头并提供缓存的内容.
但是,由于请求实际上是通过http层进入rails应用程序,因此响应将始终为200,因为缓存不再发生在http层.
要确认这是真的,请在您的一个缓存操作中插入:
<%= Time.now.to_i %>
然后,重新加载页面几次,你会发现时间戳不会改变.
| 归档时间: |
|
| 查看次数: |
1050 次 |
| 最近记录: |