2012-02-19 6 views
5

EDIT

To pytanie powinno być: Dlaczego rails_admin powodując rake asset:precompile na niepowodzenie?Rails 3.1: Dlaczego rails_admin powoduje, że `rake asset: prekompilacja` kończy się niepowodzeniem?

Uaktualniam z Rails 3.0 do 3.1 i włączam potok zasobów. Gdzieś po drodze, rails_admin zepsuł prekompilowanie aktywów:

-----> Preparing app for Rails asset pipeline 
     Running: rake assets:precompile 
     rake aborted! 
     Undefined variable: "$red". 
     (in /tmp/build_zkm1tzzdhdh6/vendor/bundle/ruby/1.9.1/bundler/gems/rails_admin-a887eee6e916/app/assets/stylesheets/rails_admin/base/theming.css.scss) 

     Tasks: TOP => assets:precompile:primary 
     (See full trace by running task with --trace) 
     Precompiling assets failed, enabling runtime asset compilation 
     Injecting rails31_enable_runtime_asset_compilation 
     Please see this article for troubleshooting help: 
     http://devcenter.heroku.com/articles/rails31_heroku_cedar#troubleshooting 

Co tu się dzieje? $red jest zdefiniowany (w innym pliku .css rails_admin). Dlaczego więc nie można uzyskać do niego dostępu? Jak tego uniknąć?

Odpowiedz

9

Naprawiłem to w pliku config/środowiskach/production.rb: Wymieniłem linię

config.assets.precompile = ['*.js', '*.css'] 

do innego

config.assets.precompile += %w(rails_admin/rails_admin.css rails_admin/rails_admin.js) 

Rozwiązanie to działa dla ruby ​​1.9.3 i szyn 3.1

+0

To samo tutaj. Chociaż nie został opublikowany, jest to rozwiązanie, z którym współpracowałem. – thewillcole

+0

Błąd pobierania Stil –

+0

@AnnaBillstrom Jaką wersję używasz szyn? –

2

Wygląda na to, że skarga nie znajduje się w pliku base.css - ślad stosu mówi, że problem był w /app/assets/stylesheets/rails_admin/base/theming.css.scss. Tam właśnie wywoływana jest zmienna $ red.

Prekompilowanie aktywów sprawdza wszystkie arkusze CSS pojedynczo, w bąbelku - , a następnie łączy je w jedną dużą porcję. Dlatego nie działa - zmienna $red nie pojawia się w pojedynczym arkuszu, mimo że pojawi się w skompilowanej wersji.

Możesz to naprawić na jeden z dwóch sposobów: zamień $red w theming.css.scss na rzeczywisty kod koloru lub możesz przenieść zmienne do pliku i zaimportować ten plik. W mojej aplikacji, na przykład, umieściłem wszystkie moje zmienne kolorów w "color_codes.css.scss". Następnie w dowolnym arkuszu stylów, w którym muszę się do nich odnieść, dodaję linię @import "color_codes"; do górnej krawędzi arkusza.

+0

Dzięki, Mark! Kilka rzeczy: 1) Nie ma pliku "/app/assets/stylesheets/rails_admin/base/theming.css.scss", więc zakładam, że jest on tworzony "w locie" z "base.css" et al; 2) Jeśli założenie jest poprawne, to jak/dlaczego "base.css" odwołuje się do "$ red"? – thewillcole

+0

Poza tym podoba mi się styl "color_codes" dla szyn, ale nie chcę edytować/utrzymywać kodu wewnątrz "rails_admin", który został wygenerowany, gdy zainstalowałem gem "rails_admin". Więc nie zamierzam jeszcze używać tego rozwiązania. – thewillcole

+1

Ups, nie widziałem przedniej części tej ścieżki pliku - nie zdawałem sobie sprawy, że to kod, który przyszedł z klejnotem. To nie jest kompilowane "w locie" z base.css; w rzeczywistości jest on przywoływany przez klejnot w katalogu całkowicie poza twoją aplikacją Rails. Wygląda na to, że gem RailsAdmin ma pewne problemy, jeśli chodzi o wstępne kompilowanie zasobów. Jest tu długi wątek dyskusyjny, który może pomóc: https://github.com/sferik/rails_admin/issues/682. –

3

Whoa! Znalazłem problem - jest to known issue na Heroku.

Nie można załączyć - dołączenie plików rails_admin .css lub .js. tj.

  • upewnij się, że nie mają żadnego catch-all * (css | js) w config.assets.precompile
  • upewnij się, że nie mają żadnego catch-all require_tree . w application.(css|js)

Moim problemem jest to, że robię to pierwsze. To powoduje, że moje pliki css są ładowane w izolacji, więc zmienne, takie jak $red, nie są prawidłowo współdzielone między nimi.

Powiązane problemy