2010-05-25 3 views
1

Я думаю, что это очень просто, но я не могу понять, что это правильно. В основном, я пытаюсь использовать промежуточное ПО Rack для установки заголовка Cache-Control по умолчанию во все ответы, поданные моим приложением Sinatra. Похоже Rack :: ResponseHeaders должен быть в состоянии делать то, что мне нужно, но я получаю сообщение об ошибке при попытке использовать синтаксис продемонстрировал here в моем rackup файле:Rack :: ResponseHeaders в стойке для Sinatra

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

я смог Rack :: кэш успешно работает следующим образом:

use Rack::Cache, 
    :default_ttl => 3600 

Однако это не позволяет достичь точности вывода я хочу, в то время как Rack :: ResponseHeaders дает мелкозернистый контроль заголовков.

FYI, мой сайт размещен на Heroku, а необходимые драгоценности Rack указаны в моем манифесте .gems.

Спасибо!

Update: После выполнения некоторых исследований, похоже, первый вопрос, что Rack :: ResponseHeaders не найден в версии стойки-вно (0.9.2), который был установлен. Я начну с изучения этого.

ответ

5

В случае, если кому-то это интересно, я смог получить эту работу. Это не выглядело как было бы простой способ установить rack-contrib-0.9.3 на Heroku, но единственный файл, что мне было нужно 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 

Это устанавливает максимальный возраст по умолчанию 1 час на объекты, для которых я не указываю явный заголовок Cache-Control в Sinatra –, а именно, статические активы.

Смежные вопросы