Rails 3.1 и Http Page Кэширование - PullRequest
7 голосов
/ 18 ноября 2011

Учитывая, что в Heroku Cedar нет кэширования http, предоставляемого Varnish, я бы хотел использовать Rack::Cache. Мне сказали, что у rails 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. Я получаю эти заголовки в ответе, но последующие запросы возвращают 200 вместо 304.

Что я делаю не так? Спасибо.

1 Ответ

11 голосов
/ 19 ноября 2011

Как вы заметили, стек Cedar не использует Varnish. Это означает, что веб-запрос всегда будет попадать на сервер ruby.

Имея это в виду, Rack :: Cache будет уважать ваши заголовки и обслуживать кэшированный контент.

Однако, поскольку запрос фактически проходит через слой http в приложение rails, ответ всегда будет равен 200, поскольку кеш больше не происходит на уровне http.

Чтобы подтвердить это, вставьте это в одно из ваших кэшированных действий:

<%= Time.now.to_i %>

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

...