2013-06-06 3 views
16

Я использую Rails 3.2.13 и Rails Asset Pipeline. Я хочу использовать Asset Pipeline, чтобы я мог использовать SASS, CoffeeScript и ERB для своих активов, и Pipeline автоматически их компилирует, поэтому я не могу отключить конвейер в разработке. Я не прекомпиляции активов в разработке никогда и нет даже каталога public/assets/.Отключить кэширование активов Sprockets в разработке

Однако, когда я внести изменения в включаемом файл, например, в _partial.html.erb файл, который включается (оказанным) в layout.html.erb файле, без изменения файла делают включая себя (в этом примере layout.html.erb), Звездочки Безразлично» t обнаруживает изменение и делает недействительным кеш, поэтому я продолжаю получать один и тот же устаревший файл. Когда я делаю это в активной разработке, я хочу отключить любое кэширование активов, чтобы я мог получать изменения по каждому запросу, но я не могу понять, как это сделать. Я поставил все следующие в моем development.rb:

config.action_controller.perform_caching = false 
config.action_dispatch.rack_cache = nil 
config.middleware.delete Rack::Cache 
config.assets.debug = true 
config.assets.compress = false 
config.cache_classes = false 

Тем не менее, даже с этим, файлы появляются под tmp/cache/assets/ и tmp/cache/sass/ и изменения не доступны в последующих запросах. Сейчас я должен вручную удалить эти каталоги каждый раз, когда хочу увидеть изменение.

К сожалению, все содержимое How Caching Works раздела Руководства RoR для трубопровода активов является:

Звездочки использует хранилище кэша по умолчанию Rails для активов кэша в разработке и производстве.

TODO: дополнительная информация об изменении хранилища по умолчанию.

Итак, как я могу получить звездочки для компиляции активов по требованию, но не кэшировать результаты?

ответ

26

Вот магия колдовство:

config.assets.cache_store = :null_store # Disables the Asset cache 
config.sass.cache = false # Disable the SASS compiler cache 

Конвейер актив имеет собственный экземпляр кэша и настройки config.assets.cache = false ничего не делает, так что вы должны установить свой кэш, чтобы быть null_store, чтобы отключить его.

Даже тогда компилятор SASS имеет собственный кеш, и если вам нужно его отключить, вы должны отключить его отдельно.

+0

То есть совершенно странно. :-) Рад, что вы сработали ... –

+0

Это было абсолютно убийство меня, чтобы включить и выключить кеш хранилища файлов при попытке проверить логику кэширования действий. (без фактической части кэширования). Спасибо. – CrazyVipa

+0

Это не работает – Benj

1

Я создал следующий gist (https://gist.github.com/metaskills/9028312), который делает именно это и нашел, что это единственный способ, который работает для меня.

+0

проблема с кэшем тоже здесь, работала с сбросом кеша браузера – brauliobo

0

Принятый ответ не делает это правильно и ухудшает производительность в разработке, полностью отключив кеш. Отвечая на ваш первоначальный вопрос, вы хотите, чтобы изменения в ссылочных файлах приводили к недействительности кэша активов, даже если они не были включены напрямую.

Решение просто объявляя такую ​​зависимость такова, что Звездочки знает, что кэш должен быть признан недействительным:

# layout.html.erb 
<% depend_on Rails.root.join('app').join('views').join('_partial.html.erb') %> 
# replace the above with the correct path, could also be relative but didn't try 
Смежные вопросы