Rails 3.1 кэширование кэша объектов
Я немного смущен, так как кажется, что application.css включает себя дважды, один раз, когда он перечисляет ресурсы из манифеста, а затем - кэш. Поэтому, когда я удаляю отдельный файл, он все еще сохраняется в файле application.css.
application.css(источник)
/*
*= require twitter/bootstrap
*= require_self
*= require_tree ./common
*= require_tree ./helpers
*/
Что работает, как ожидалось, и выводит в режиме dev все соответствующие отдельные файлы
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, но вместо этого я получаю весь мой конкатенированный код 106kb длиной.
IE, если я удалю файл в общем каталоге, он не исчезнет. Он больше не указан в выводе, но css все еще появляется из application.css
Ответы
Ответ 1
У меня была такая проблема, как раньше. Это было вызвано после того, как я предварительно скомпилировал активы, которые он собирался после applcation.css, в общей папке, а также в каталоге приложений. Я не уверен, как это исправить, чтобы оно не продолжалось в режиме dev, но если вы удалите каталог /public/assets
, он должен его исправить.
Проверьте и посмотрите, есть ли у вас папка public/assets, если вы это сделаете, и она заполнена, вероятно, почему вы видите double.
Ответ 2
В настоящее время (2012-09-24) появляется ошибка в рельсах/звездочках, что приводит к неправильному обнаружению импортированных файлов.
Это должно быть исправлено в рельсах 3.2.9 и позже, но в среднем вы можете обойти его следующим образом:
- Убейте экземпляр рельсов
- rm -rf tmp/cache
- Запустите экземпляр рельсов
Теперь вы должны увидеть правильный css.
Ответ 3
Вы можете посмотреть
fooobar.com/questions/146698/...
"Добавление config.serve_static_assets = false в development.rb предотвратит загрузку файлов из /public/assets "
Это сделало это для меня.
Ответ 4
@Решение Agustin делает это для меня, но вот несколько вещей, которые вам нужно сделать:
-
Удалить все в /tmp/cache/assets
-
Добавьте config.serve_static_assets = false
в development.rb или test.rb(кредиты @Agustin)
-
Перезагрузите сервер.
-
Убедитесь, что ваш 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, противоречащему моим обновлениям в отдельных файлах.
Ответ 5
Лучший способ, который работал у меня, - удалить содержимое каталога tmp/cache/*...
Ответ 6
То, что сработало для нас, это установка "config.assets.debug = false"
Это больше не устанавливает HTML-код CSS как href= "/assets/bootstrap-new.css? body = 1", вместо этого настройте его как href= "/assets/bootstrap-new.css", который я думаю была проблема.
Ответ 7
У меня была та же проблема. Несмотря на очистку tmp/cache и public/assets, мини-приложение application.css все еще кэшировалось и обслуживалось где-то, и мои изменения в отдельных файлах css не получали.
Это сработало для меня:
в application.css удалите строку *= require_self
перезапустить сервер
который, кажется, удаляет кеш, и если вы нажмете на application.css в исходном тексте браузера, вы больше не увидите сокращенную версию
замените *= require_self
обратно в файл и продолжите разработку.
Ответ 8
Для меня был последний шаг, но я исправился. Вот что я сделал:
- выключить сервер рельсов
- активы рейка: чистый
- rake tmp: clear
- перезапустить сервер rails
Затем я обновил свой экран в Google Chrome, и IT STILL НЕ РАБОТАЕТ. Итак, я запустил Firefox и voila, он действительно работал. Это означает, что Chrome кэшировал старые файлы в браузере. Итак, я очистил кеш браузера в Chrome, и он сработает!
Ответ 9
Я знаю, что это старый вопрос, но одно исправление, которое сработало для меня, это то, что у меня был nginx-проксирование в моей среде разработки, и у него был блок location ~ ^/(assets)/
в конфигурации. Либо прокомментируйте это, либо попробуйте перезапустить nginx, чтобы аннулировать кеш. Если вы разрабатываете, вы, скорее всего, просто захотите полностью его прокомментировать.
Я потерял слишком много времени, чтобы устранить эту проблему, пока не вспомнил об этом.
Ответ 10
Активы делают свою работу лучше при запуске приложения в производственной среде, тогда вы будете загружать только приложение .css со всеми включенными файлами и сжимать там, чтобы уменьшить запрос сервера, и этот application.css со сжатым стили будут кэшироваться.
http://guides.rubyonrails.org/asset_pipeline.html