Ресурсы Rails: прекомпиляция странного поведения - PullRequest
9 голосов
/ 17 марта 2012

Я оказался перед странным поведением задачи assets:precompile или, по крайней мере, перед чем-то, чего я не до конца понимаю.

Итак, я использую Rails 3.1.3, Sprockets 2.0.3, Less 2.0.11 для своего веб-приложения, плюс я полагаюсь на Bootstrap для макета, поэтому я использую также less-rails 2.1.8 и less- рельсы-бутстрап 2.0.8. Я настроил стиль, как они говорят здесь .

Конфигурация моих активов:

stylesheets
|--application.css.scss
|--custom-style/
   |--variables.less
   |--mixins.less
   |--buttons.less
|--custom-style.css.less

В application.css.scss я делаю

//=require custom-style

А в обычном стиле я делаю

@import "twitter/bootstrap/reset";
//@import "twitter/bootstrap/variables"; // Modify this for custom colors, font-sizes, etc
@import "custom-style/variables";
//@import "twitter/bootstrap/mixins";
@import "custom-style/mixins";
// And all the other standar twitter/bootstrap imports...

// Other custom-style files to import
@import "custom-style/buttons"
//...

// And other rules here
//...

Наконец, в buttons.less я использую некоторые переменные и миксины, определенные в файлах начальной загрузки variables.less и mixins.less, @white и .buttonBackground, чтобы быть более точными.

Если я запускаю bundle exec rake assets:precompile с вышеуказанной конфигурацией, задача не выполняется, и я получаю эту ошибку:

$ bundle exec rake assets:precompile
/usr/local/rvm/rubies/ruby-1.9.3-p0/bin/ruby /usr/local/rvm/gems/ruby-1.9.3-p0/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
rake aborted!
.buttonBackground is undefined

Но разве это изменится?

buttons.less --> buttons.css.less

@import "buttons"  --> @import "buttons.css.less"

Все отлично работает !!

Связано ли это с областью применения меньшего количества переменных и функций при работе с вложенным импортом? Или что-то, что связано с порядком, когда синтаксический анализатор или Sprockets обрабатывает дерево импорта?

Я что-то упускаю или что-то делаю неправильно?

Спасибо:)

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

Ответы [ 3 ]

1 голос
/ 11 июля 2012

Я могу представить одну из двух возможностей прямо сейчас:

1) Вы должны изменить application.css.scss на application.css.less и использовать:

@import "custom-style";

вместо звездочек //= require ...

2) Компилятор LESS очень привередлив в своих точках с запятой. Я заметил, что у вас есть @import "custom-style/buttons" - должно быть @import "custom-style/buttons";

Не знаю, действительно ли проблема настолько проста, но это только начало.

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

Это на самом деле не отвечает на ваш вопрос, но является ли единственной причиной, по которой вы смешиваете sass и меньше, чтобы использовать загрузчик Twitter? Если вы предпочитаете использовать просто sass, есть несколько самоцветов начальной загрузки, где авторы преобразуют меньше в scss, например bootstrap-sass . До того, как я потратил слишком много времени, пытаясь совмещать оба проекта, я полностью согласился с тем или другим, но это только мое мнение.

0 голосов
/ 20 марта 2012

Вы пытались переименовать файл в buttons.css.less, но не указали расширение @import (т. Е. @import "buttons")?

Вот как я это делаю с SCSS, и он отлично работает.

Другая идея заключается в замене //=require custom-style в application.css.less на директиву @import "custom-style". Руководство по рельсам здесь рекомендует использовать @import (который обрабатывается с помощью SCSS / LESS) более //=require (который обрабатывается с помощью звездочек):

Если вы хотитеЕсли вы используете несколько файлов Sass, вы должны использовать правило Sass @import вместо этих директив Sprockets.Используя директивы Sprockets, все файлы Sass существуют в пределах их собственной области видимости, делая переменные или миксины доступными только в документе, в котором они были определены.

...