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 %>

Затем перезагрузите страницу несколько раз, и вы заметите, что отметка времени не изменится.

Другие вопросы по тегам