Rails использует cached application.css несмотря на изменения - PullRequest
18 голосов
/ 12 августа 2011

У меня есть приложение Rails 3.1, которое использует SASS.Файл application.css.scss выглядит следующим образом:

@import 'reset.css';
@import '960.css';
@import 'pages/master.css.scss';

У меня есть сценарий наблюдения, который касается application.css.scss каждый раз, когда изменяется один из @imported файлов.

Некоторое время эта настройка работала нормально,Начиная с прошлой недели (и я не уверен, почему), Rails вытащил кешированную версию application.css для веб-страниц, несмотря на все мои попытки перезапустить приложение, повторно коснуться application.css.scss и т. Д. Я такжеудалено .sass-cache безрезультатно.

Есть идеи?

Ответы [ 6 ]

10 голосов
/ 21 сентября 2012

У меня была такая же проблема.Я остановил сервер, выполнил rm -fr tmp/cache, и мои css-файлы были наконец перестроены.

7 голосов
/ 19 декабря 2012

У меня возникла похожая проблема после запуска rake assets:precompile в разработке. Может, Rails обслуживает предварительно скомпилированные активы из public/assets? Попробуйте очистить это.

Вам не нужно прикасаться к aplication.css.scss при разработке, rails должен обслуживать новый контент всякий раз, когда изменяется один из @ включенных файлов.

Кроме того, убедитесь, что у вас есть следующее в config/environments/development.rb

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

# Expands the lines which load the assets
config.assets.debug = true
7 голосов
/ 28 июня 2012

Во-первых, обычные проверки очищенности кэша могут помочь. Очистить кеш браузера. Очистить файловый кеш сервера (если вы в dev / test или можете позволить себе его в работе) и sass-кеш:

rake tmp:cache:clear
rm -fr tmp/sass-cache #or 'compass clean' if using compass

Если это не поможет, может быть, Rails скомпилировал ДРУГОЙ application.css в другом месте (который не был удален очисткой кэша)?

Например, я запустил compass watch app/assets/stylesheets/application.css.scss для целей отладки, и он создал файл public / assets / application.css, который в силу своего расположения в public / предотвратил любой новый application.css. Изменения в таблице стилей scss не замечены Rails. Как только я удалил его, приложение снова извлекло из таблиц стилей .scss. Это только один из примеров случайного переопределения файла. Попробуйте запустить поиск по всему каталогу приложений, ища любые сгенерированные файлы application.css, сделав это после очистки кэша, чтобы избежать появления этих результатов в ваших результатах.

(К вашему сведению, чтобы избежать моей конкретной проблемы, я теперь запускаю компасное наблюдение с указанием --css-dir на кеш, чтобы предотвратить мою проблему

$ compass watch app/assets/stylesheets/application.css.scss  --css-dir tmp/cache/

)

2 голосов
/ 12 ноября 2012

Чтобы стереть кэш конвейера активов, достаточно грубой силы rm -rf tmp / *.Это, безусловно, исправило несколько необъяснимых глюков CSS и JavaScript в моем опыте.В качестве превентивной меры было бы также неплохо очистить кэш после обновления гемов или изменения конфигурации конвейера ресурсов, хотя это может быть просто суеверием.в вашей среде разработки (подробнее об этом в следующей статье), вы также захотите после этого выполнить команду rm -rf public / assets / *, чтобы очистить ее.

0 голосов
/ 11 января 2013

У меня была эта проблема, но я фактически помещал css в application.css, а не в файлы, которые он включал.Я очистил application.css, чтобы просто включить все мои CSS.Итак, мой application.css теперь выглядит так:

/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
 * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
 *
 * You're free to add application-wide styles to this file and they'll appear at the top of the
 * compiled file, but it's generally better to create a new file per style scope.
 *
 *= require_self
 *= require 'bootstrap.min'
 *= require 'global'
 */

Мои изменения отражаются каждый раз, когда я изменяю один из включенных файлов (например, global.css)

0 голосов
/ 12 января 2012

Случайно у меня возникла проблема с кэшированием, связанная с использованием Twitter bootstrap и application.css.scss.В основном я изменил application.css.scss на простой application.css и исправил свою проблему.Может быть, это может помочь вам?Если вы еще не поняли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...