나는 내 인생에 대해 이것을 이해할 수 없다. Roku :: Cache를 사용하여 Heroku의 내 정적 공개 페이지 일부를 캐싱하고 리버스 프록시를 지나칠 경우를 대비해 캐싱 작업을 수행합니다.Heroku 삼나무 스택 - 랙 캐시 헤더
예를 들어, 다음 코드는 내 "집"행동의 모든 의도와 목적을 위해
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
, 이것은 최대-10 세와 공공 캐시 제어 태그를해야 더?
$ 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"
는 (?하지만 더 쉬운 방법이 있어야한다처럼 어쩌면 수동으로 Cache-Control 헤더를 설정하는 방법이 보인다). 심지어 최소한 아래로 컨트롤러 행동을 시도
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 , public: true, 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, private, must-revalidate
X-Request-Id: b33087fe0c2ae986c4cac88f14420b7c
X-Runtime: 0.006000
X-Rack-Cache: stale, invalid
Vary: Accept-Encoding
X-Varnish: 349105873
Age: 0
Via: 1.1 varnish
!
액션 캐싱을 사용할 수도 있습니까? 헤더가 어떻게 다른지 확인하기 위해 페이지 캐싱으로 테스트 해 보셨습니까? – KendallB
hmmm 귀하의 요지를 봅니다. Rack :: Cache가 페이지를 제공하도록 올바르게 설정되어 있다면 (가장 깨끗한 방법은 아니지만 Heroku에서 할 수있는 최선의 방법입니다.), 캐시 작업을 위해 아무것도 넣지 않아야합니다. 나는 그곳에 좋은 측정을 위해 그것을 가지고 있다고 생각합니다. 나는 그것을 꺼내보고 무슨 일이 일어나는지를 볼 것입니다. 다시 너에게 갈거야. – Brandon
그래서 당신 말이 맞습니다. 캐싱 작업을 수행 할 때 헤더가 올바르게 설정되었습니다. 나는 이것이 비록 필연적으로 이것을 이해하고 있는지 모른다. HTTP 응답 헤더를 작업 결과를 캐싱과 분리하여 설정하면 안됩니까? 즉, 내 레일 앱 (액션 캐시)의 응답을 캐싱 할 수는 없지만 사용자가 페이지를 다시 요청하면 서버에 전혀 맞지 않는 HTTP 헤더를 설정해야합니다 (올바른 설정으로 제공됨). 최대 연령 헤더에?) – Brandon