Исключить изображения из кэширования с Memcached / Dalli
Недавно я реализовал кэширование с помощью дополнения memcached heroku, используя Dalli gem для моего приложения на Rails. Что я обнаружил, так это то, что при развертывании в Heroku он также кэширует все мои статические ресурсы, в том числе изображения, которые быстро увеличивают размер моей кэшированной памяти. Образцы логов героки выглядят как
cache: [GET /assets/application.css] fresh
app[web.1]: cache: [GET /assets/sign-in-twitter.gif] fresh
app[web.1]: cache: [GET /assets/ajax-loader.gif] fresh
app[web.1]: cache: [GET /assets/sign-in-facebook.gif] fresh
В частности, для страниц индекса размер кэша увеличивается примерно на 5 МБ для каждого отдельного запроса. Это поведение настраивается? Могу ли я настроить memcached для кэширования только моих фрагментов, а не для предварительного кэширования каждого изображения на каждой странице?
1 ответ
Используя Далли драгоценный камень, В config/environments/production.rb
:
config.action_dispatch.rack_cache = {: metastore => Dalli:: Client.new,: entitystore => 'file: tmp / cache / rack / body',: allow_reload => false }
Приведенная выше конфигурация кэширует информацию о метастазах в memcached, но фактическое тело ресурсов в файловой системе.
В config/application.rb
:
если!Rails.env.development? &&!Rails.env.test? config.middleware.insert_before Rack::Cache, Rack::Static, URL: [config.assets.prefix], root: 'public' конец
Стойка:: Статическое использование:
Промежуточное программное обеспечение Rack:: Static предоставляет URL-адреса с соответствующим префиксом в корневой каталог. Здесь я даю config.assets.prefix в качестве моего префикса url, который по умолчанию равен "/assets". Это должно обслуживать любые ресурсы непосредственно из каталога public /assets вместо нажатия Rails:: Cache. Это будет работать только в том случае, если вы запускаете "rake assets: precompile" в производстве, иначе в "public /assets" не будет предварительно скомпилированных активов.