Отключить кэширование ресурсов Sprockets в разработке на Rails 4

Другой вопрос " Отключить кэширование Sprockets в разработке" посвящен тому, как отключить кэширование Sprockets в Rails 3.2. Как вы делаете то же самое на Rails 4? Я работаю над драгоценным камнем, который находится глубоко в конвейере активов и должен очистить tmp/cache/* и перезапуск Rails становится утомительным.

1 ответ

Решение

Если вы посмотрите на источник Sprockets, вы увидите, что если cache_classes тогда верно app.assets устанавливается на app.assets.indexи файловая система больше не проверяется.

Чтобы обойти это в процессе разработки, вы можете добавить что-то похожее на следующее development.rb конфигурация:

# Sprockets configuration: prevent sprockets from caching assets in development
# when cache_classes is set to true
sprockets_env = nil
config.assets.configure do |env|
  sprockets_env = env

  # Sprockets environment configuration goes here
  # env.js_compressor  = :uglifier # or :closure, :yui
  # env.css_compressor = :sass   # or :yui
end

if config.cache_classes
  config.after_initialize do
    Rails.application.assets = sprockets_env
  end
end

Это, по сути, вызывает почтение к объекту Sprockets::Environment до того, как он будет перезаписан объектом Sprockets::Index, и позволяет проверять файловую систему на наличие новых ресурсов, даже когда cache_classes правда. Кажется, это работает для нас в разработке, так что, надеюсь, это поможет кому-то еще.

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