2012-07-18 9 views
6

Sobre el tema de la tubería de activos, rieles guías sugieren que los rieles se puede enlazar al controlador archivos CSS específicos mediante una llamada telefónica:Rails3 de tuberías activo: controlador de hojas de estilo específicas

stylesheet_link_tag params[:controller] 

El extracto de Rieles Guías:

Por ejemplo, si genera un ProjectController, Rails también agregará un nuevo archivo en la aplicación/assets/javascripts/projects.js.coffee y otro en la aplicación/assets/stylesheets/projects.css.scss. Debe colocar cualquier JavaScript o CSS exclusivo para un controlador dentro de sus respectivos archivos de activos, ya que estos archivos pueden cargarse solo para estos controladores con líneas como <% = javascript_include_tag params [: controller]%> o <% = stylesheet_link_tag params [ : controlador]%>. http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline

Eso funciona bien en el desarrollo donde permitimos rieles a caer de nuevo en la tubería de activos. En producción, sin embargo, aparece un error que dice que la hoja de estilo no está precompilada.

Por lo que he leído, hay que añadir todos los bienes que desea que se manifiesta como archivos independientes en la matriz de precompilación así:

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

Si quiero hojas de estilo específicas de controlador que se enlazan como según el ejemplo anterior de Rails Guide, ¿tengo que enumerar cada uno en la matriz de precompilación?

Respuesta

6

La respuesta corta es ... Sí.

Sin embargo, recuerde que la canalización de activos también se puede usar para hacer coincidir los selectores. Implementé una configuración similar para un cms simple donde sabía que quería que cada controlador tuviera su propio .css y .js. La configuración es como ...

config.assets.precompile += ["*.css", "*.js") 
No

la mejor solución si ha de destinar hojas de estilo o secuencias de comandos que no están directamente relacionados con los controladores. En mi caso, cada controlador necesitaba archivos .js muy diferentes.

Además, si sus diferentes activos se pueden agrupar en dos o tres grupos interrelacionados, puede considerar crear manifiestos múltiples y luego enumerarlos explícitamente.

EDIT Me gustaría completar esta respuesta para cualquier persona que esté tratando de decidir cómo configurar su precompilación de activos.

Junto con la precompilación explícita de cada activo o manifiesto, también puede colocar todos los archivos que desee precompilados en una carpeta de la carpeta de activos y utilizar la misma coincidencia de comodines para compilar solo esos activos.

por ejemplo

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

compile todas las hojas de estilo CSS y sólo .js en la carpeta de los manifiestos.

De manera similar, puede pasar assets.precomile a regex. Entonces, si quisieras agregar "pre_" a cualquier archivo que quisieras precompilar, podrías usar una coincidencia como ...

config.assets.precompile += [/^pre_\w*.(css|js)/i] 

Las posibilidades son infinitas, sólo que no sienta que tiene que conformarse con la precompilación de todos los activos, probablemente un inútil en devorar ya que la mayoría scripts y CSS deben ser escritos para ser utilizado en varias instancias y en conjunto con otra scripts, o tirar todo, incluso scripts altamente especializados en la aplicación. *.

Cuestiones relacionadas