Rails 3.1 и Http Page Кэширование
Учитывая, что в Heroku Cedar нет кэширования http, предоставляемого Varnish, я бы хотел использовать Rack::Cache
, Мне сказали, что рельсы 3.1.1 имеют Rack::Cache
по умолчанию активен, мне просто нужно убедиться, что в конфигурации есть:
config.action_controller.perform_caching = true
и мне нужно выбрать хранилище кеша, для этого эксперимента я использую:
config.cache_store = :memory_store
В действие страницы, которую я хочу кешировать, я добавил следующие строки:
response.header['Cache-Control'] = 'public, max-age=300'
response.header['Expires'] = CGI.rfc1123_date(Time.now + 300)
Этот код хорошо работал с Varnish, первый запрос вернул бы 200, а последующий (в течение 5 минут) вернул бы 304
,
Этого не происходит с Rails 3.1 и Heroku Cedar Stack. Я получаю эти заголовки в ответе, но последующие запросы возвращают 200 вместо 304.
Что я делаю неправильно? Спасибо.
1 ответ
Как вы заметили, стек Cedar не использует Varnish. Это означает, что веб-запрос всегда будет попадать на сервер ruby.
Имея это в виду, Rack::Cache будет уважать ваши заголовки и обслуживать кэшированный контент.
Однако, поскольку запрос фактически проходит через слой http в приложение rails, ответ всегда будет равен 200, поскольку кеш больше не происходит на уровне http.
Чтобы подтвердить это, вставьте это в одно из ваших кэшированных действий:
<%= Time.now.to_i %>
Затем перезагрузите страницу несколько раз, и вы заметите, что отметка времени не изменится.