ruby-on-rails – Heroku Cedar Stack – 机架缓存标头

我无法想象我的生活.尝试使用Rack :: Cache来缓存Heroku上的一些静态公共页面,以及在它通过反向代理时执行操作缓存.

例如,这是我的“home”动作中的代码

class StaticPagesController < ApplicationController
  layout 'public'

  caches_action :about,:contact,......,:home,.....

  ......

  def home
    last_modified = File.mtime("#{Rails.root}/app/views/static_pages/home.html.haml")
    fresh_when last_modified: last_modified,public: true,etag: last_modified
    expires_in 10.seconds,:public => true       
  end

对于所有意图和目的,这应该有一个公共缓存控制标记,max-age 10 no?

$curl -I http://myapp-staging.herokuapp.com/

HTTP/1.1 200 OK
Cache-Control: max-age=0,private,must-revalidate
Content-Type: text/html; charset=utf-8
Date: Thu,24 May 2012 06:50:45 GMT
Etag: "997dacac05aa4c73f5a6861c9f5a9db0"
Status: 200 OK
vary: Accept-Encoding
X-Rack-Cache: stale,invalid
X-Request-Id: 078d86423f234da1ac41b418825618c2
X-Runtime: 0.005902
X-Ua-Compatible: IE=Edge,chrome=1
Connection: keep-alive

我做错了什么吗?我觉得有一些陈旧的,无效的缓存响应…这是我第四次点击页面.

配置信息:

# Use a different cache store in production
config.cache_store = :dalli_store

config.action_dispatch.rack_cache = {
  :verbose      => true,:metastore => "memcached://#{ENV['MEMCACHE_SERVERS']}",:entitystore => "memcached://#{ENV['MEMCACHE_SERVERS']}"#,}

# OLD : disable Rails's static asset server (Apache or Nginx will already do this)
config.serve_static_assets = true
config.static_cache_control = "public,max-age=2592000"

(也许有一种方法可以手动设置缓存控制标头?看起来应该有一种更简单的方法).

UPDATE

我甚至尝试将控制器操作降至最低限度:

def home
  expires_in 10.seconds,:public => true
  #last_modified = File.mtime("#{Rails.root}/app/views/static_pages/home.html.haml")
  #fresh_when last_modified: last_modified,etag: last_modified
end

它不起作用……

HTTP/1.1 200 OK Server: Nginx Date: Thu,24 May 2012 19:15:18 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Status: 200 OK X-Ua-Compatible: IE=Edge,chrome=1 Etag: "733798214c652f39ae79b4037e9111dc" Cache-Control: max-age=0,must-revalidate X-Request-Id: b33087fe0c2ae986c4cac88f14420b7c X-Runtime: 0.0
class StaticPagesController < ApplicationController
  layout 'public'

  caches_action :about,:public => true       
  end
class StaticPagesController < ApplicationController layout 'public' caches_action :about,:public => true endX-Rack-Cache: stale,invalid
vary: Accept-Encoding
X-Varnish: 349105873
Age: 0
Via: 1.1 varnish

解决方法

也许重新考虑整个事情,只使用rails缓存.新的cache_digests gem应该让你在rails级别做你想做的事情变得微不足道:
https://github.com/rails/cache_digests

我愿意打赌这会打败你的方法,包括进行文件系统调用,每隔10秒检查一次文件时间戳.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...