2010-05-25 4 views
1

나는 이것이 매우 쉽다고 생각하지만 올바르게 이해할 수없는 것 같습니다. 기본적으로 랙 미들웨어를 사용하여 Sinatra 앱에서 제공하는 모든 응답에 기본 Cache-Control 헤더를 설정하려고합니다. 그것은 ResponseHeaders 정확히 내가 무엇을해야 할 수 있어야한다 : 랙처럼 보이는,하지만 난 구문을 사용하려고 시도하는 오류가 내 rackup 파일에 here을 입증 :Rack :: ResponseHeaders in Sinatra

use Rack::ResponseHeaders do |headers| 
    headers['X-Foo'] = 'bar' 
    headers.delete('X-Baz') 
end 

내가 랙을 얻을 수 있었다 :: 반면,

use Rack::Cache, 
    :default_ttl => 3600 

그러나,이 내가 원하는 정확히 출력을 달성하지 않습니다 ResponseHeaders을 :: 랙 헤더의 세밀한 제어 할 수 있습니다 : 캐시는 다음과 같이 성공적으로 작동합니다.

FYI, 내 사이트는 Heroku에서 호스팅되며 필수 Rack gem은 내 .gems 매니페스트에 지정되어 있습니다.

감사합니다.

업데이트 : 첫 번째 문제가 랙 :: ResponseHeaders가 설치된 랙의 contrib (0.9.2) 버전에서 발견되지 않는처럼 몇 가지 조사를 수행 한 후, 그것은 보인다. 나는 그것을 조사함으로써 시작할 것입니다.

답변

5

누군가가 관심이있는 경우이 작업을 수행 할 수있었습니다. Heroku가에 rack-contrib-0.9.3를 설치하는 쉬운 방법이있을 것입니다 것처럼 보이지 않았다, 그러나 나는 필요한 유일한 파일 response_headers.rb, 그래서 다음과 같이 간단히 말해서 나는 내 rackup을 내 프로젝트 디렉토리에이 복사 및 편집 :

require 'rack/contrib/response_headers' 

# set default cache-control header if not set by Sinatra 
use Rack::ResponseHeaders do |headers| 
    if not headers['Cache-Control'] 
     headers['Cache-Control'] = "public, max-age=3600" 
    end 
end 

이것은 Sinatra –에 명시적인 Cache-Control 헤더를 지정하지 않은 객체에 대한 기본 최대 보존 기간을 1 시간으로 설정합니다.

관련 문제