Rack :: ResponseHeaders в стойке для Синатры - PullRequest
1 голос
/ 25 мая 2010

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

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

Мне удалось заставить Rack :: Cache успешно работать следующим образом:

use Rack::Cache,
    :default_ttl => 3600

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

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

Спасибо!

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

1 Ответ

5 голосов
/ 27 мая 2010

В случае, если кому-то интересно, я смог заставить это работать. Не похоже, что будет простой способ установить rack-contrib-0.9.3 на Heroku, но единственный файл, который мне нужен, был response_headers.rb, поэтому я просто скопировал его в каталог проекта и отредактировал мой рэкап следующим образом:

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 & ndash; а именно, статические активы.

...