2011-12-19 18 views
8

Sé que ya hay un millón de preguntas al respecto, pero no puedo obtener esto.Rails 3.1, excluir archivos JS de la canalización de activos

Quiero incluir la mayoría de mis archivos JS en la canalización de activos, pero tengo algunos que quiero cargar condicionalmente (o solo en ciertas páginas). Estos son archivos grandes y complicados que el 95% de los usuarios jamás utilizarán, por lo que preferiría que no se carguen para cada usuario. Un conjunto de archivos JS es para un calendario, colocado en:

app/assets/javascripts/calendar 

Así que mi manifiesto está configurado para incluir sólo el directorio superior (y sin incluir el subdirectorio calendario):

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
//= require_directory . 

Mi config/ambientes/production.rb:

# Compress JavaScripts and CSS 
config.assets.compress = true 

# Don't fallback to assets pipeline if a precompiled asset is missed 
config.assets.compile = false 

# Generate digests for assets URLs. 
config.assets.digest = true 

# This following config is left over from previous Rails app, 
# so not sure if it's now unnecessary ... 
# Disable Rails's static asset server 
# In production, Apache or nginx will already do this 
config.serve_static_assets = false 

En la vista, estoy usando nifty_layout Ryan Bates para incluir manualmente los archivos de calendario:

javascript "calendar/date.js", "calendar/jquery.weekcalendar.js", "calendar/custom.js" 

He intentado precompilar tanto en desarrollo como en producción: los documentos no tienen claro dónde se supone que debo hacer esto, pero parece producción.

Y cuando corro a la página, me sale esto:

ActionView::Template::Error (calendar/date.js isn't precompiled) 

no quiero que precompilado. Quiero que se cargue manualmente. (En realidad, sería correcto precompilar en un archivo que no sea la aplicación principal.js que se crea, pero no sé cómo hacerlo).

¿Cuál es la solución?

Gracias!

Respuesta

4

Bien, no me di cuenta de que así era como funciona, pero creo que Lo descubrí.

Añadir los archivos que se cargan manualmente a config/ambientes/production.rb así:

config.assets.precompile += %w(calendar/*.js jquery_calendar/*.css) 

pensé que esto sólo les dobla en los application.js y application.css, pero al parecer no - los compila como archivos individuales.

A continuación, puede llamar a los archivos a medida que tradicionalmente se le (en este caso, el uso de nifty_layout):

javascript "calendar/date.js", "calendar/jquery.weekcalendar.js", "calendar/custom.js" 
Cuestiones relacionadas