2012-02-19 12 views
5

MODIFICA

Questa domanda deve essere: Perché rails_admin causa il fallimento di ?Rails 3.1: Perché rails_admin sta causando l'errore `rake asset: precompile`?

Sto aggiornando da Rails 3.0 a 3.1 e abilitando la pipeline di asset. Da qualche parte lungo la strada, rails_admin rotto il mio bene precompilazione:

-----> 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 

Che cosa sta succedendo qui? $red è definito (in un file rails_admin .css diverso). Quindi, perché non è possibile accedervi con lo theming.css.scss? Come posso evitare questo?

risposta

9

Ho fissato questo nel file di configurazione/ambienti/production.rb: ho sostituito la linea

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

ad un altro

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

Questa soluzione sta lavorando per Ruby 1.9.3 e rotaie 3.1

+0

Lo stesso qui. Anche se non pubblicato, questa è la soluzione con cui sono andato. – thewillcole

+0

Stil ricevendo errore –

+0

@AnnaBillstrom Quale versione utilizza le rotaie? –

2

Sembra che il reclamo non sia in base.css - la traccia dello stack dice che il problema era in /app/assets/stylesheets/rails_admin/base/theming.css.scss. Ecco dove viene chiamata la variabile $ red.

Le risorse di precompilazione esaminano tutti i fogli CSS singolarmente, in una bolla - quindi li uniscono in un'unica grande porzione. Ecco perché non riesce: la variabile $red non viene visualizzata nel singolo foglio, anche se verrebbe visualizzata nella versione compilata.

È possibile risolvere questo in uno dei due modi: sostituire il $red in theming.css.scss con un codice di colore reale, oppure è possibile spostare le variabili in un file e importare il file. Ad esempio, nella mia app ho messo tutte le mie variabili di colore in "color_codes.css.scss". Quindi, in qualsiasi foglio di stile in cui ho bisogno di fare riferimento a loro, aggiungo la riga @import "color_codes"; all'inizio del foglio.

+0

Grazie, Mark! Poche cose: 1) Non esiste un file "/app/assets/stylesheets/rails_admin/base/theming.css.scss", quindi presumo che sia creato al volo da "base.css" et al; 2) Se l'assunto è corretto, allora come/perché "base.css" fa riferimento anche a "$ rosso"? – thewillcole

+0

Inoltre, mi piace lo stile "color_codes" per i binari in generale, ma non voglio dover modificare/mantenere il codice all'interno di "rails_admin", che è stato generato quando ho installato la gemma "rails_admin". Quindi non ho intenzione di usare questa soluzione ancora. – thewillcole

+1

Whoops, non ha visto la parte anteriore di quel percorso di file - non mi ero reso conto che questo era il codice fornito con una gemma. Non viene compilato al volo da base.css; in realtà viene referenziato dalla gemma stessa in una directory completamente esterna all'app Rails. Sembra che la gemma RailsAdmin abbia qualche problema quando si tratta di precompilare le risorse in generale. C'è un lungo thread di discussione che può aiutare: https://github.com/sferik/rails_admin/issues/682. –

3

Whoa! Ho trovato il problema: è un known issue su Heroku.

Non è possibile includere in posizione coperta i file rails_admin .css o .js. vale a dire:.

  • assicurarsi che non si dispone di alcun catch-all * (css | js) in config.assets.precompile
  • assicurarsi che non si dispone di alcun catch-all require_tree . in application.(css|js)

Il mio problema è che sto facendo il primo. Ciò causa il caricamento dei miei file css in isolamento, quindi le variabili, come $red, non sono condivise correttamente tra loro.

Problemi correlati