ruby - rails - the asset is not present in the asset pipeline
La compilación de activos se bloquea en el entorno del servidor con: "NoMethodError: método indefinido`[] ''para nil: NilClass " (3)
He estado sacándome el pelo por este. Siempre he tenido una mala relación con el inventario de activos, siempre me está dando problemas ... Y hoy de nuevo ...
Cuando intento compilar mis activos localmente, todo está bien:
$ RAILS_ENV=production rake assets:precompile --trace
Pero cuando lo despliego con Capistrano que hace:
cd /var/www/xxx/releases/20140717164232 && ( RAILS_ENV=production bundle exec rake assets:precompile )
Se bloquea con el siguiente error:
rake aborted!
NoMethodError: undefined method `[]'' for nil:NilClass
(in /var/www/xxx/releases/20140717164232/app/assets/stylesheets/application-sign-in.css)
/var/www/xxx/shared/bundle/ruby/2.1.0/gems/sprockets-2.11.0/lib/sprockets/sass_functions.rb:63:in `sprockets_context''
En serio, no sé cómo depurar esto ... Localmente no puedo reproducirlo y en mi servidor el error no me apunta a ningún lado ...
Busqué el error y probé un par de cosas, pero nada ayudó. Algunos dicen que el error va a desaparecer al actualizar ... O al agregar la gema de los piñones antes de la gema de sass-rails.
Mi proyecto se configura como el siguiente; Una aplicación de Rails 4 con una gema que contiene elementos que representan una plantilla. Utilizo la siguiente línea para asegurarme de que todo está compilado:
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif *.css *.js *.eot *.woff *.ttf *.svg)
¿Alguien que sepa cómo resolver esto, o cómo depurarlo?
EDITAR
Quitar todo el helper asset-url()
parece funcionar ... Pero de nuevo, no tengo idea de por qué ...
Tuve el problema de samme y resultó ser un archivo css que contiene asset-url
que no tenía la extensión .scss
. Extrañamente pude compilar los activos localmente pero no en el servidor.
el problema es debido a la extensión .css en lugar de .scss. Lo he cambiado en .scss y funcionó.
Heroku tiene un post sobre esto. Precompírelo localmente y agregue todos esos archivos, especialmente /public/assets/manifest.yml
. Heroku debe ignorar la compilación previa y proceder.