2011-12-19 1 views
8

So che ci sono già un milione di domande su questo, ma non riesco a ottenere questo.Rails 3.1, esclude i file JS dalla pipeline degli asset

Desidero includere la maggior parte dei miei file JS nella pipeline degli asset, ma alcuni ne voglio caricare in modo condizionale (o solo su determinate pagine). Questi sono file grandi e complicati e non saranno mai usati dal 95% degli utenti, quindi preferirei non averli caricati per ogni utente. Una serie di file JS è per un calendario, collocato in:

app/assets/javascripts/calendar 

Quindi il mio manifesto è impostato per includere solo la directory principale (ed escludere la sottodirectory di calendario):

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

mio config/ambienti/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 

Nella vista, sto usando nifty_layout Ryan Bates' per includere manualmente i file di calendario:

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

Ho provato a precompilare sia nello sviluppo che nella produzione - i documenti non sono chiari dove dovrei farlo, ma sembra produzione.

E quando corro nella pagina, ottengo questo:

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

non voglio che precompilati. Lo voglio caricato manualmente. (In realtà, sarebbe corretto precompilare in un file diverso dal principale application.js che è stato creato, ma non so come farlo.)

Qual è la soluzione?

Grazie!

risposta

4

OK, non mi rendevo conto che questo era come funziona, ma io penso L'ho capito.

aggiungere i file da caricare manualmente per config/ambienti/production.rb in questo modo:

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

ho pensato che questo semplicemente piegato nel application.js e application.css, ma a quanto pare non - li compila come file individuali.

Quindi, è possibile chiamare i file che tradizionalmente sarebbe (in questo caso, utilizzando nifty_layout):

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