Ajustes Rails config.assets.precompile para procesar todos los archivos CSS y JS en aplicaciones / activos

Deseo precomstackr todos los archivos CSS y JS en la carpeta de la app/assets mi proyecto. NO quiero precomstackr todo en proveedor / activos o lib / activos, solo las dependencias de mis archivos según sea necesario.

Probé la siguiente configuración de comodín, pero precomstack incorrectamente todo. Esto da como resultado mucho trabajo adicional e incluso causa una falla de comstackción cuando se usa bootstrap-sass.

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

¿Cuál es mi mejor opción para procesar solo mis archivos en app/assets ? ¡Gracias!

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

Eso comstackrá cualquier JavaScript o CSS en la ruta de su activo, independientemente de la profundidad del directorio. Encontrado a través de esta respuesta .

Esta tarea se vuelve más difícil por el hecho de que los piñones funcionan con rutas lógicas que no incluyen dónde se encuentran los recursos subyacentes sin comstackr.

Supongamos que mi proyecto tiene el archivo JS “/app/assets/javascripts/foo/bar.js.coffee”.

El comstackdor de piñones primero determinará la extensión del archivo de salida, en este caso “.js”, y luego evaluará si comstack o no la ruta lógica “foo / bar.js”. El recurso no comstackdo podría estar en “app / assets / javascripts”, “vendor / assets / javascripts”, “lib / assets / javascripts” o una gem, por lo que no hay forma de incluir / excluir un archivo particular basado en la ruta lógica solo.

Para determinar dónde se encuentra el recurso subyacente, creo que es necesario preguntar al entorno de piñones (disponible a través del objeto Rails.application.assets) para resolver la ruta real del recurso dada la ruta lógica.

Aquí está la solución que estoy usando. Soy bastante nuevo para Ruby, así que este no es el código más elegante:

 # In production.rb config.assets.precompile < < Proc.new { |path| if path =~ /\.(css|js)\z/ full_path = Rails.application.assets.resolve(path).to_path app_assets_path = Rails.root.join('app', 'assets').to_path if full_path.starts_with? app_assets_path puts "including asset: " + full_path true else puts "excluding asset: " + full_path false end else false end } 

Con piñones> 3.0, esto no funcionará en producción porque Rails.application.assets será nil (asumiendo default: config.assets.compile = false).

Para solucionarlo, reemplace la asignación full_path por:

 @assets ||= Rails.application.assets || Sprockets::Railtie.build_environment(Rails.application) full_path = @assets.resolve(path) 

Ver también: https://github.com/rails/sprockets-rails/issues/237

Un ligero ajuste a la respuesta de techpeace:

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

Hubiera agregado un comentario a su respuesta, pero aún no tengo suficiente reputación. ¡Dame un voto positivo y estaré allí!

NOTA: esto también precomstackrá todo el CSS / JavaScript incluido a través de rubygems.