2012-03-17 10 views
9

Znalazłem się przed dziwnym zachowaniem zadania assets:precompile lub przynajmniej przed czymś, czego nie rozumiem w pełni.Zasoby szyny: prekompiluj dziwne zachowanie

Używam Rails 3.1.3, Sprockets 2.0.3, Less 2.0.11 dla mojej aplikacji webowej, a także polegam na Bootstrap dla layoutu, więc używam również less-rails 2.1.8 i mniej -rails-bootstrap 2.0.8. Dostosowałem styl, tak jak mówią: here.

Konfiguracja moich aktywów jest:

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

W application.css.scss zrobić

//=require custom-style 

aw niestandardowego stylu zrobić

@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 
//... 

Wreszcie w buttons.less Używam niektórych zmiennych i mixin zdefiniowanych w variables.less i mixins.less B Pliki ootstrap, @white i .buttonBackground są bardziej szczegółowe.

Gdybym uruchomić bundle exec rake assets:precompile z powyższej konfiguracji, zadanie nie powiedzie się i otrzymuję ten błąd:

$ 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 

Ale to, że jeśli zrobię to zmienia

buttons.less --> buttons.css.less 

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

Wszystko działa bez zarzutu !!

Czy jest to coś związanego z zakresem mniej zmiennych i funkcji podczas pracy z zagnieżdżonymi importami? Lub coś, co ma związek z zamówieniem, tym mniej parser, lub Sprockets, przetwarza drzewo importu?

Czy brakuje mi czegoś lub robię coś w niewłaściwy sposób?

Thanks :)

Uwaga: pojawia się błąd nawet z oryginalnych zmiennych i plików wstawek, więc to nie jest związane z zadajnikami dokonanych w nich.

+2

„Znalazłem się przed dziwne zachowanie aktywów: prekompilacji zadania” - nie wszyscy :) też uderza mnie, że mieszanie application.css.scss i swoje .less plików może być kwestia. Chciałbym spróbować albo/LESS/SASS i być może Sass nie rozpoznaje twoich dyrektyw @import. Nie jest to konieczne, więc zmień plik application.css.scss -> application.css, usuń sass-rails z Gemfile i sprawdź, czy to pomaga. Powodzenia :) – sbeam

Odpowiedz

0

Czy próbowałeś zmienić nazwę pliku na buttons.css.less, ale zachowując rozszerzenie z @import (np. @import "buttons")?

Tak to robię z SCSS i działa dobrze.

Inną myślą jest zastąpienie //=require custom-style w application.css.less z dyrektywą @import "custom-style". Rails Guide here zaleca stosowanie @import (który jest przetwarzany z SCSS/mniej) są ponad //=require (który jest przetwarzany z zębatkami):

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

Przyciski '@import" "nie działają, to dlatego, że interpreter LESS szuka pliku' .less', a nie dla '.css.less' – mokagio

+0

Czy mógłbyś/mogłabyś połączyć mnie ** gdzieś * *? O ile wiem '// = wymagaj', powinieneś porozmawiać ze Sprockets ... – mokagio

+0

Tutaj: http://guides.rubyonrails.org/asset_pipeline.html#manifest-files-and-directives - yellow box down a trochę, włożę to w odpowiedź. –

1

mogę myśleć o jednej z dwóch możliwości teraz:

1) powinien zmienić plik application.css.scss na application.css.mniej i zastosowanie:

@import "custom-style";

zamiast kół zębatych //= require ...

2) LESS kompilatora bardzo drobiazgowy o jej średników. Zauważyłem, że masz @import "custom-style/buttons" - powinien być @import "custom-style/buttons";

Nie wiem, czy problem jest naprawdę takie proste, ale to dopiero początek.

0

To tak naprawdę nie odpowiada na twoje pytanie, ale czy jest to jedyny powód, dla którego miksujesz sass, a mniej używa twitter bootstrap? Jeśli wolisz używać tylko sass, istnieje kilka klejnotów bootstrap, w których autorzy konwertują mniej na scss, na przykład bootstrap-sass. Zanim zmarnowałem zbyt wiele czasu, próbując żonglować obydwoma projektami, kupiłem całkowicie w jednym lub drugim, ale to tylko moja opinia.