2012-02-19 12 views
5

EDITAR

Esta pregunta debería ser: ¿Por qué rails_admin causa rake asset:precompile para fallar?Rails 3.1: ¿Por qué rails_admin provoca que `rake asset: precompile` falle?

Estoy actualizando de Rails 3.0 a 3.1 y habilitando la canalización de activos. Por el camino, rails_admin rompió el precompilación activo:

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

¿Qué está pasando aquí? $red se define (en un archivo rails_admin .css diferente). Entonces, ¿por qué no se puede acceder al theming.css.scss? ¿Cómo evito esto?

Respuesta

9

i fijo esto en el archivo de configuración/ambientes/production.rb: Substituí la línea

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

a otro

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

Esta solución está trabajando para Ruby 1.9.3 y los carriles 3.1

+0

Lo mismo aquí. Aunque no está publicado, esta es la solución que elegí. – thewillcole

+0

Stil recibiendo el error –

+0

@AnnaBillstrom ¿Qué versión usa usted? –

2

Parece que la queja no está en base.css: el seguimiento de la pila indica que el problema estaba en /app/assets/stylesheets/rails_admin/base/theming.css.scss. Ahí es donde se llama la variable $ red.

La precompilación de activos analiza todas las hojas de CSS de forma individual, en una burbuja - y luego las unifica en una gran porción. Es por eso que falla: la variable $red no aparece en la hoja individual, aunque se mostraría en la versión compilada.

Puede solucionar esto de una de estas dos formas: reemplace $red en theming.css.scss con un código de color real, o puede mover sus variables a un archivo e importar ese archivo. En mi aplicación, por ejemplo, puse todas mis variables de color en "color_codes.css.scss". Luego, en cualquier hoja de estilos donde necesite referenciarlos, agrego la línea @import "color_codes"; a la parte superior de la hoja.

+0

Gracias, Mark! Pocas cosas: 1) No existe el archivo "/app/assets/stylesheets/rails_admin/base/theming.css.scss", así que supongo que se crea sobre la marcha desde "base.css" et al; 2) Si la suposición es correcta, ¿cómo/por qué "base.css" incluso hace referencia a "$ red"? – thewillcole

+0

Además, me gusta tu estilo "color_codes" para los rieles en general, pero no quiero tener que editar/mantener el código dentro de "rails_admin", que se generó cuando instalé la gema "rails_admin". Así que no voy a usar esa solución todavía. – thewillcole

+1

Vaya, no vi la parte frontal de la ruta del archivo, no me di cuenta de que era un código que venía con una gema. No se compila sobre la marcha desde base.css; en realidad está siendo referenciada por la gema en un directorio completamente fuera de su aplicación Rails. Parece que la gema RailsAdmin tiene algunas dificultades cuando se trata de precompilar activos en general. Aquí hay un largo hilo de discusión que puede ayudar: https://github.com/sferik/rails_admin/issues/682. –

3

Whoa! Encontré el problema: es un known issue en Heroku.

No puede incluir: incluya los archivos rails_admin .css o .js. es decir:.

  • asegurarse de que no tiene ningún comodín * (CSS | js) en config.assets.precompile
  • asegurarse de que no tiene ningún cajón de sastre require_tree . en application.(css|js)

Mi problema es que estoy haciendo lo primero. Eso hace que mis archivos CSS se carguen de forma aislada, por lo que las variables, como $red, no se comparten correctamente entre ellos.

Cuestiones relacionadas