2012-03-17 2 views
9

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

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

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

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 Я использую некоторые переменные и mixins, определенные в variables.less и mixins.less B файлы ootstrap, @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 обрабатывает дерево импорта?

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

спасибо :)

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

+2

«Я оказался перед странным поведением активов: прекомпиляционная задача» - не все мы :) также поражает меня тем, что смешивание application.css.scss и ваших .less-файлов может быть вопрос. Я попробую либо/или LESS/SASS, и, возможно, Sass не распознает ваши директивы @import. Это не обязательно, поэтому измените application.css.scss -> application.css, удалите sass-rails из Gemfile и посмотрите, помогает ли это. Удачи :) – sbeam

ответ

0

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

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

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

If you want to use multiple Sass files, you should generally use the Sass @import rule instead of these Sprockets directives. Using Sprockets directives all Sass files exist within their own scope, making variables or mixins only available within the document they were defined in.

+0

Кнопки '@import" '' не работают, потому что интерпретатор LESS ищет файл '.less', а не' .css.less' – mokagio

+0

Не могли бы вы соединить меня ** где-то * *? Насколько я знаю, '// = require', как вы должны говорить со Sprockets ... – mokagio

+0

Здесь: http://guides.rubyonrails.org/asset_pipeline.html#manifest-files-and-directives - желтый ящик вниз бит, я буду придерживаться его в ответе. –

1

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

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

@import "custom-style";

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

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

Dunno, если проблема действительно такая простая, но это старт.

0

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

Смежные вопросы