rake assets:precompile throws Sass::SyntaxError: Invalid CSS after */

Надеюсь, это не повторяющаяся проблема; Я пробовал другие решения на SO безрезультатно

При отправке моего приложения в Heroku отправка не удалась, потому что application.css не удалось скомпилировать.

Мой вывод терминала:

Running: rake assets:precompile
rake aborted!
Sass::SyntaxError: Invalid CSS after " */": expected selector, was "@font-face"
(in /tmp/build_17e92975-ae8d-446f-8678-110eeeccfb64/app/assets/stylesheets/adminsite/application.css)
(sass):1845

Попытки решения

Я искал и удалял все экземпляры «*/», которые стоят перед @font-face внутри каталога ../stylesheets/adminsite/. Та же проблема и результат.

Я пробовал установить:

  config.assets.compile = true

... Та же проблема

Изменить

Вот мой application.css (не уровень приложения, а тот, который не работает в каталоге adminsite)

/*
 * 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 jquery.ui.all
 *= require_self
 *= require normalize
 *= require ./global/plugins/bootstrap/css/bootstrap
 *= require ./global/plugins/uniform/css/uniform.default
 *= require ./global/plugins/bootstrap-switch/css/bootstrap-switch
 *= require ./global/css/components
 *= require ./global/css/plugins
 *= require ./global/plugins/simple-line-icons/simple-line-icons
 *= require ./admin/layout/css/layout
 *= require ./admin/layout/css/themes/light2
 *= require ./admin/layout/css/custom
 */

Удалив и перекомпилировав, я обнаружил, что

*= require ./global/plugins/font-awesome/scss/font-awesome

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

rake assets:precompile --trace RAILS_ENV=production

но я не могу нажать на героку, используя

git push herokunb newbeta:master

РЕШЕНО:

Это был потрясающий шрифт CSS. Удаление этого из require исправило это. Проблема оказалась нерешенной только из-за моих собственных ошибок с git.


person Will Taylor    schedule 08.09.2014    source источник
comment
Это файл во временном каталоге, а не в каталоге вашего проекта. Удалите файл и повторите попытку. Если он все еще жалуется, откройте файл и опубликуйте содержимое в строке 1845 (или там, где он жалуется).   -  person Substantial    schedule 08.09.2014
comment
Можете ли вы опубликовать свой application.css?   -  person Richard Peck    schedule 08.09.2014
comment
выложил application.css. Там нет /tmp/build_17e92975-ae8d-446f-8678-110eeeccfb64/ ... кажется, создается и удаляется при использовании грабли?   -  person Will Taylor    schedule 08.09.2014
comment
Пожалуйста, опубликуйте свое решение в качестве ответа и примите его.   -  person Substantial    schedule 08.09.2014
comment
Если вы удалите шрифт Awesome CSS, вы сможете успешно развернуть свое приложение. Но все ваши страницы не будут иметь этот CSS. Как вы с этим справляетесь?   -  person Jiayi Zhou    schedule 07.09.2016


Ответы (6)


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

Вероятно, вы используете rails 3.2, sass-rails 3.2 и font-awesome-sass 4.1.

Получается, что rails 3.2 использует sass-rails 3.2.6, что зависит от sass >= 3.1. Однако похоже, что sass 3.1 несовместима с font-awesome 4.1, поэтому я явно установил гем sass для использования версии 3.2 в моем Gemfile.

gem 'sass-rails', '~> 3.2.6'
gem 'sass', '~> 3.2.0'

Надеюсь, это поможет кому-то! ;)

person Daniel G. Pereira    schedule 12.09.2014
comment
У меня была та же проблема, разные версии, после того как базовый гем sass был обновлен с 3.3.10 до 3.4.9. Явная установка в Gemfile исправила это: gem 'sass', '~> 3.3.10' - person Curtis; 15.01.2015

Другой способ решить эту проблему — явно указать конвейеру ресурсов использовать версию ресурса css вместо версии scss. Например, если вы импортируете файл .scss в свой application.scss следующим образом:

@import "angular-material";      # this will use scss version of the asset

В качестве альтернативы вы можете указать ему использовать версию css следующим образом:

@import "angular-material.css";  # this will use the css version

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

person moeabdol    schedule 17.04.2016

РЕШЕНИЕ

Файл, который ломал вещи, был шрифтом awesome CSS. Удаление этого из строк «require» в application.css позволило прекомпиляции работать.

Способ сделать это состоял в том, чтобы сначала удалить все обязательные поля предварительной компиляции, показывая, что он скомпилируется, а затем медленно добавить обязательные поля обратно, чтобы увидеть, где они сломались.

(Спасибо всем, кто помог разобраться.)

person Will Taylor    schedule 08.09.2014

Что касается меня, я забыл добавить # перед входом в класс.

Так должно быть

#sign-in 
  (your code)
person Kevin Zhao    schedule 05.05.2015

Я новичок в рельсах, и у меня была аналогичная проблема при нажатии на героку. Друг посмотрел на мой файл application.css и заметил, что у меня

*= require bootstrap

а также

*= require bootstrap-datetimepicker

ниже */

Удаление их позволило мне успешно нажать.

person darrellcohn    schedule 04.06.2015

Я тоже столкнулся с подобной проблемой и наткнулся на эту тему. Для меня оказалось, что я оставил } в конце одного из своих операторов CSS. Добавил его, и я вернулся в течение нескольких минут.

person PSCampbell    schedule 23.07.2015