2012-09-27 28 views
14

¿Cómo se usa config.assets.precompile en producción para incluir solo los archivos en 'lib/assets/javascripts', 'lib/assets/stylesheets', 'vendor/assets/javascripts' y 'vendor/assets/stylesheets' ?¿Cómo uso config.assets.precompile para directorios en lugar de archivos individuales?

Básicamente algo como:

config.assets.precompile += %w(pagespecific.js anotherpage.js) 

sino que se utiliza para auto incluyen archivos en directorios específicos que no son 'app/activos/javascript' o "app/activos/hojas de estilo.

* Editar: la adición de la solución que terminé usando para la página de JS específicos

config.assets.precompile += ['pages/*.js'] 

Respuesta

27

Simplemente puede escribir así:

config.assets.precompile += ['directory/*'] 
+0

Guau, parece bastante simple:] Lo probaré más tarde hoy. ¡Gracias! – eddywashere

+0

De nada, ¡espero que sea de ayuda! – zolter

+1

¡Gracias de nuevo! El ejemplo que utilicé fue un directorio de páginas. 'config.assets.precompile + = ['pages/*. Js']' que funcionará siempre que el directorio de páginas esté dentro de cualquiera de las rutas que forman parte de config.assets.paths. (como/lib/assets/javascripts) – eddywashere

0

me encontré con este enlace, y piensa que puede ser útil para usted, por favor, véase la respuesta

de keithgaputis. Rails config.assets.precompile setting to process all CSS and JS files in app/assets

Creo que puede hacer lo siguiente.

# 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 "excluding asset: " + full_path 
     false 
    else 
     puts "including asset: " + full_path 
     true 
    end 
    else 
    false 
    end 
} 
3

El punto de recopilación de activos es la construcción de una (o un pequeño número de) los archivos para reducir al mínimo el número de peticiones HTTP desde el navegador.

Si va a servir cada archivo de forma individual, ¿por qué no desactiva la precompilación?

Para utilizar precompilación como se pretende, crear un directorio completo en un archivo usando Piñones require_directory:

//= require_directory ./awesome_js_app 

... y la lista de ese archivo en la matriz config.assets.precompile.

Por defecto, todos los CSS están integrados en application.css & JS en application.js. Se pueden añadir más archivos de alto nivel para compilar con la directiva de compilación previa en config/environments/production.rb (y otros envs si lo desea.) Por ejemplo:

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

A continuación, los piñones //= require ... directivas en los archivos de alto nivel determinará la composición del archivo final compilado.

Puede usar estos archivos adicionales de nivel superior en sus diseños para tener diferentes CSS & JS para ciertas vistas.

+0

Gracias, quiero mis estilos y scripts de toda la aplicación en 1 archivo increíblemente empaquetado para aprovechar las ganancias de rendimiento. Debería haber dicho que quiero usar páginas específicas js y posiblemente css.Aunque me gustaría señalar que es menos doloroso agregar clases en el cuerpo para css específicos de la página vs usar la lógica js para determinar si está en la página correcta. – eddywashere

0

Es probablemente un poco mejor incluir esto como una ruta de activo (como por su ejemplo de solución sería):

config.assets.paths << Rails.root.join('app', 'assets', 'javascripts', 'pages') 

Se también le permite incluir rutas que no están en el directorio de activos (por ejemplo, incluyendo bootstrap-sass). Estas rutas se agregan luego a su carpeta de activos en su directorio público y se colocan en la ubicación de sus activos si se usa algo como asset_sync.

Cuestiones relacionadas