Подтвердить что ты не робот

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

4b9b3361

Ответ 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