2015-01-04 8 views
12

Qualcosa di simile (in un inizializzatore):Come posso eseguire un codice personalizzato prima di qualsiasi asset precompilato in Rails?

Sprockets.before_precompile do 
    # some custom stuff that preps or autogenerates some asset files 
    # that should then be considered in the asset pipeline as if they were checked in 
end 

In particolare, vorrei eseguire un'attività sorso di riunire alcuni javascript con qualche preprocessori speciali, e preferisco non riscrivere il mio gulpfile per ottenere il bene pipeline per gestire tutto ... e voglio anche che funzioni su Heroku senza bisogno di un buildpack personalizzato, se possibile. qualche idea? Presumibilmente Pignoni ha questi tipi di ganci.

risposta

22

Come si può vedere dalla fonte, le ruote dentate non hanno un tale gancio, ma è possibile utilizzare i ganci di task rake. Ad esempio, dovresti creare un'attività rake che avvia tutti i preprocessori, il gulp, ecc., Quindi questa attività potrebbe essere messa prima della precompilazione.

# lib/tasks/before_assets_precompile.rake 

task :before_assets_precompile do 
    # run a command which starts your packaging 
    system('gulp production') 
end 

# every time you execute 'rake assets:precompile' 
# run 'before_assets_precompile' first  
Rake::Task['assets:precompile'].enhance ['before_assets_precompile'] 

Poi basta correre rake assets:precompile, e di conseguenza il compito before_assets_precompile sarà eseguita a destra prima di esso.

anche assicurarsi di utilizzare system invece di exec, perché exec uscirà il processo su un palco di funzionamento di questo pre-compito e non verrà eseguito assets:precompile dopo se stesso come ci si aspettava.

Fonti:

  1. Rake before task hook
  2. http://www.dan-manges.com/blog/modifying-rake-tasks
+0

Esattamente quello di cui avevo bisogno! Grazie! – btown

+0

Funzionerebbe con la compilazione automatica degli asset che avviene in modalità 'sviluppo'? – Suan

+0

@Suan, se non sbaglio, la compilazione live per lo sviluppo env viene eseguita sul caricamento della pagina, eseguire un'attività di gulp per creare un'app ogni volta che la pagina viene ricaricata sembra un po 'eccessivo per me. Immagino che per questo caso sia meglio usare gulp watch, quindi costruirà l'app solo quando apporti modifiche ai file sorgente, e alla ricarica della pagina otterrai le risorse più recenti preparate da gulp. Non sono sicuro che ci sia un compito simile di Rake per la compilazione live. –

Problemi correlati