Кэширование страниц в Heroku не является хорошим вариантом, как описано в статье Стратегии кэширования для Rails :
Встроенное в Rails кэширование страниц работает путем создания файла в файле.
система. В Heroku есть эфемерное хранилище файлов, поэтому при кэшировании страниц
кажется, работает, это не будет работать, как задумано. Вы должны вместо этого использовать
кэширование действий или фрагментов, или, альтернативно, использование Rack :: Cache в качестве
обратный прокси-сервер, чтобы вообще избежать запросов к вашим приложениям.
Вместо этого лучше всего использовать Rack :: Cache с хранилищем кеша, которое совместно используется dynos. Например, вы могли бы использовать один из дополнений к Hercu memcache или AWS ElastiCache , среди других вариантов. Rack :: Cache легко запустить на Heroku; смотрите Использование Rack :: Cache с Memcached в Rails 3.1 + .
Вместо того чтобы сказать caches_page
для записи страницы в файловую систему, вы зададите желаемое поведение кэширования в заголовках HTTP с помощью таких методов, как expires_in
. Обратите внимание, что эти заголовки не только влияют на ваш кеш, они также влияют на кеш браузера.
«Но подождите», спросите вы, «как мне истечь срок действия страницы из Rack :: Cache, если она также может храниться в браузере пользователя?» Ответ: нет. Вместо этого, разработайте кэширование, чтобы использовать преимущества условных значений GET . В любом случае повторная проверка часто проще, чем ручное истечение срока действия страниц.
Rack :: Cache - это обычный HTTP-кеш, который вы размещаете между кешем браузера пользователя и вашим веб-приложением. См. Кеши вещей для более тщательного рассмотрения того, что это может означать. Хорошей новостью является то, что как только вы правильно настроите кэширование, оно будет работать на стороне сервера и на стороне клиента. Ваше приложение будет хорошо работать с кеширующими прокси, и вы даже можете добавить CloudFront или другой CDN - в конце концов, ваше кеширование полностью описано стандартными заголовками HTTP.
Rack :: Cache по умолчанию включает заголовок HTTP Host: в ключ кеша, поэтому поддомены обрабатываются автоматически. После того, как вы настроитесь на Heroku, все, что вам нужно сделать, это сказать expires_in 30.minutes, :public => true
.