Я оказался перед странным поведением задачи 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 обрабатывает дерево импорта?
Я что-то упускаю или что-то делаю неправильно?
Спасибо:)
Примечание: Я получаю сообщение об ошибке даже с исходными файлами переменных и миксинами, так что это не связано с выполненными в них переопределениями.