рельсы 3.1 конвейер активов css кэширование в разработке - PullRequest
36 голосов
/ 17 ноября 2011

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

application.css (источник)

/*
*= require twitter/bootstrap
*= require_self
*= require_tree ./common
*= require_tree ./helpers
*/

Работает должным образом и выводит в режиме разработки все соответствующие отдельные файлы

development.rb

  # Do not compress assets
  config.assets.compress = false

  # Expands the lines which load the assets
  config.assets.debug = true

выход

<link href="/assets/twitter/bootstrap.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/application.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/common/announcement.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<link href="/assets/common/button.css?body=1" media="screen" rel="stylesheet" type="text/css" />
<Blah blah>

application.css (вывод)

Это должно быть пустым? Поскольку все, что у меня есть в моем файле application.css, это манифест, а не реальный css, но вместо этого я получаю весь свой каскадный код длиной 106 КБ.

То есть, если я удалю файл в общем каталоге, он не исчезнет. Он больше не отображается в выходных данных, но css по-прежнему отображается в приложении. Css

Ответы [ 10 ]

41 голосов
/ 17 ноября 2011

У меня была такая проблема раньше. Это было вызвано после того, как я предварительно скомпилировал ресурсы, которые он отправлял после applcation.css в общедоступной папке, а также в каталоге приложений. Я не уверен, как это исправить, чтобы оно не продолжалось в режиме разработки, но если вы удалите каталог /public/assets, это должно исправить.

Проверьте и посмотрите, есть ли у вас папка public / assets, если она у вас есть, и она заполнена, возможно, поэтому вы видите double.

37 голосов
/ 24 сентября 2012

В настоящее время (2012-09-24) существует ошибка в рельсах / звездочках, из-за которой они не могут правильно определить импортированные файлы.

Это должно быть исправлено в рельсах 3.2.9 и позже, но в то же время вы можете обойти это следующим образом:

  1. Убить экземпляр рельсов
  2. rm -rf tmp / cache
  3. Запустить экземпляр rails

Теперь вы должны увидеть правильный css.

10 голосов
/ 18 января 2012

Возможно, вы захотите взглянуть на

https://stackoverflow.com/a/7854902/686460

"Добавление config.serve_static_assets = false в файл development.rb предотвратит загрузку файлов из / public / assets"

Это сделало это для меня.

7 голосов
/ 19 апреля 2012

@ Решение Агустина делает это для меня, но вот несколько вещей, которые вам нужно сделать:

  1. Удалить все в / tmp / cache / assets

  2. Добавьте config.serve_static_assets = false в файл development.rb или test.rb (кредиты @Agustin)

  3. Перезагрузите сервер.

  4. Убедитесь, что ваш application.js / .css не кэшируется в вашем браузере.Перейдите на http://localhost:3000/assets/application.js?body=1 и нажмите ctrl + f5, чтобы принудительно обновить (вы также можете попробовать добавить параметр рандомизатора в конце: http://localhost:3000/assets/application.js?body=1&rnd=12343 Если вы получили что-то еще и ctrl + f5 все еще не помогло, вам нужно очиститькеш браузера.

Пропуск любого из этих шагов вернул кешированный файл application.js / .css, конфликтующий с моими обновлениями в отдельных файлах.

4 голосов
/ 20 октября 2012

Лучший способ, который мне помог, это удалить содержимое каталога tmp / cache / * ...

3 голосов
/ 06 июня 2013

То, что нам помогало, это настройка 'config.assets.debug = false'

Это больше не устанавливало включенный в HTML CSS как href = "/ assets / bootstrap-new.css? Body = 1", вместо этого установите его как href =" / assets / bootstrap-new.css ", что, я думаю, было проблемой.

1 голос
/ 08 ноября 2012

У меня была такая же проблема.Несмотря на очистку tmp / cache и public / assets, минимизированный application.css все еще кэшировался и обслуживался откуда-то, и мои изменения в отдельных файлах css не обрабатывались.

Это сработало для меня: в application.css удалите строку *= require_self

перезапустите сервер

, который, кажется, удаляет кэш, и если вы нажмете на application.css вв вашем браузере вы больше не увидите минимизированную версию

, замените *= require_self обратно в файл и продолжите разработку.

0 голосов
/ 27 сентября 2013

Я знаю, что это старый вопрос, но одно исправление, которое сработало для меня, это то, что у меня был прокси-сервер nginx в моей среде разработки, и в конфигурации был блок location ~ ^/(assets)/.Либо закомментируйте это, либо попробуйте перезапустить nginx, чтобы сделать кеш недействительным.Если вы разрабатываете, вы, вероятно, просто захотите полностью закомментировать это.

Я потерял слишком много времени на устранение неполадок, пока не вспомнил об этом.

0 голосов
/ 27 июня 2013

Мне нужен был последний шаг, но я все исправил. Вот что я сделал:

  1. выключить сервер рельсов
  2. рейк активов: чистый
  3. грабли tmp: очистить
  4. перезагрузите сервер rails

Затем я обновил свой экран в Google Chrome, и ЭТО ЕЩЕ НЕ РАБОТАЛО. Итак, я запустил Firefox и вуаля, он действительно работал. Это означает, что Chrome кэшировал старые файлы в браузере. Итак, я очистил кеш браузера в Chrome, и он заработал!

0 голосов
/ 17 ноября 2011

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

http://guides.rubyonrails.org/asset_pipeline.html

...