2011-11-29 3 views

답변

2

페이지 캐싱, 최고의 선택이되지 않습니다 :

class MyController < ApplicationController 
    caches_page :index 

    def index 
    @content = MyObject.find(request.subdomain) 
    ... 

subdomain1.myapp.com > <cachedir>/subdomain1/index.html 
subdomain2.myapp.com > <cachedir>/subdomain2/index.html 

다음 기술은 Heroku가에 구성 될 것 같지 않습니다 nginx를 다시 쓰기 액세스를 필요로 Caching Strategies for Rails 기사 :

레일에 내장 된 페이지 캐싱 작업 파일 시스템에 파일을 생성하여. Heroku는 일시적인 파일 저장소를 가지고 있으므로 페이지 캐싱이 작동하는 것처럼 보일 수 있지만 의도 한대로 작동하지는 않습니다. 대신 액션 또는 프래그먼트 캐싱을 사용하거나, 아니면 앱에 대한 요청을 전혀 피하기 위해 Rack :: Cache를 역방향 프록시로 사용해야합니다.

대신 dynos간에 공유되는 캐시 저장소에 Rack :: Cache를 사용하는 것이 가장 좋습니다. 예를 들어 Heroku memcache 애드온 중 하나 또는 AWS ElastiCache 중 하나를 사용할 수 있습니다. Roku :: Cache는 Heroku에서 실행하기 쉽습니다. Using Rack::Cache with Memcached in Rails 3.1+을 참조하십시오.

caches_page을 파일 시스템에 쓰는 대신, expires_in과 같은 방법으로 HTTP 헤더에서 원하는 캐싱 동작을 지정합니다. 이러한 헤더가 캐시에 영향을 줄뿐만 아니라 브라우저 캐시에도 영향을줍니다.

"잠깐만 기다려주세요."사용자 브라우저가 보유 할 수있는 경우 Rack :: Cache에서 페이지를 어떻게 만료합니까? 답변 : 그렇지 않습니다. 대신 conditional GETs을 활용하도록 캐싱을 설계하십시오. 어쨌든 페이지를 수동으로 만료하는 것보다 재 검증이 더 쉽습니다.

Rack :: Cache는 사용자의 브라우저 캐시와 웹 앱 사이에 레이어링하는 일반적인 HTTP 캐시입니다. 그것이 의미하는 바를보다 철저하게 다루기 위해서는 Things Caches Do을보십시오. 좋은 소식은 일단 캐시가 제대로되면 서버 측과 클라이언트 측에서 작동합니다. 앱 캐싱 기능이 뛰어나며 CloudFront 또는 다른 CDN에 놓을 수도 있습니다. 결국 캐싱은 표준 HTTP 헤더로 완벽하게 설명됩니다.

Rack :: Cache의 기본값은 HTTP 호스트 : 헤더를 캐시 키에 포함하므로 하위 도메인이 자동으로 처리됩니다. Heroku에서 설정되면 expires_in 30.minutes, :public => true라고 말하면됩니다.