2011-09-02 11 views
8

Sto solo facendo conoscenza con Rails 3.1 e ho bruciato un po 'di tempo aggiornando un vecchio progetto e cercando di capire come si comporta la nuova pipeline di asset in modalità di sviluppo rispetto alla produzione.Come si rilevano errori nella pipeline delle risorse dei binari prima della produzione?

L'impostazione predefinita config.assets.precompile impostazione benedice solo application.css e application.js, con l'intenzione che tutto dovrebbe essere servita come un unico foglio di stile e un unico file javascript.

Ovviamente ci sono situazioni in cui non vogliamo che, in modo che possiamo aggiungere elementi alla lista in quella variabile di configurazione ...

Ecco la situazione mi sono imbattuto in con il mio progetto sandbox quando si va alla produzione:

  1. Ha visitato il sito in fase di sviluppo, ha visto che tutto funzionava. Le risorse sono state collegate come file separati e il sito è stato visualizzato correttamente.
  2. Ha caricato il sito sul mio server e ho cercato di farlo funzionare in produzione. Il primo errore stava dicendo che "ie.css" (un foglio di stile condizionale) non è precompilato. (Ero in Safari e questo foglio di stile non è stato nemmeno scaricato: l'errore è stato generato dall'helper stylesheet_link_tag prima di eseguire il rendering della pagina.)
  3. Ran rake assets:precompile e riprovato.
  4. Aggiunto l'articolo in questione a config.assets.precompile e riprovato.
  5. Kicked l'errore lungo il cordolo fino a quando non ha colpito un altro errore di asset.
  6. GOTO 3.

Non sapendo come affrontare questo, sono andato in tondo un paio di volte fino a quando ho pensato che ho ottenuto tutte le attività e il sito è stato il rendering in produzione. Quindi l'ho provato in MSIE e ho ricevuto un altro errore 500: "belated_png_fix.js" veniva caricato condizionatamente e non è stato visualizzato fino a quel momento.

Quindi la mia domanda è, oltre a tentativi ed errori o una forte dipendenza dai test di integrazione, come posso prevedere che il mio sito non verrà bombardato quando la pipeline degli asset scopre che non è stato aggiunto alcun foglio di stile o javascript alla lista di precompilazione?

Sono anche curioso di sapere perché una risorsa del foglio di stile mancante dovrebbe causare l'errore dell'intera pagina 500 invece di limitarsi a compilarlo su richiesta o a servire un 404 quando tale risorsa viene richiesta. Si tratta di un progetto intenzionale per "fallire presto"?

+0

Ho recentemente convertito una vecchia app nella pipeline degli asset e non ho avuto problemi. Mi ci è voluto un po 'per capire come tutto ha funzionato insieme però. Per rispondere alla tua domanda, puoi mostrare il contenuto dei tuoi file css e js, in particolare le istruzioni require? Sono anche interessato a come li chiami dal punto di vista. Infine sono tutti in app/asset o stai usando lib/assets e anche vendor/assets? –

risposta

1

Ho avuto problemi simili anche con i binari 3.1. La cosa migliore che puoi fare è installare capistrano multi stage e ottenere un server di gestione temporanea.

Se per qualsiasi motivo questo non è possibile, installare una macchina virtuale sul computer e provare a replicare l'ambiente dei server.

+0

Sì, lo faccio già, essenzialmente. Cade sotto il titolo di "tentativi ed errori" (che potrebbe certamente essere automatizzato con alcuni test di integrazione ... forse non c'è modo migliore.) –

0

Questo può essere eccessivo, ma questo funziona per me (mi fornisce risorse pulite e compilate). Ho questo nel mio file .bash_profile.

alias ggo='bundle exec rake assets:clean && bundle exec rake assets:precompile && git add . && git commit -m "precompile" && git push origin master && cap deploy' 

e questo nella mia configurazione/ambienti/produzione.RB (produzione forze per compilare in caso di necessità, non dovrebbe essere necessario se non ricordo di eseguire "ggo" prima):

config.assets.compile = true 

Quindi, il mio flusso di lavoro è: 1. Codice 2. git add & git commit 3. Se tocchi i file CSS/SASS/JS/CoffeeScript, eseguo ggo. Altrimenti, eseguirò una distribuzione normale.

+0

Trucco utile, ma il problema è che precompilare agisce solo sugli elementi che conosce di. Il trucco sta in qualche modo a capire quali risorse sono state collegate da vari punti di vista e assicurando che vengano aggiunte alla lista. –

1

Il dispiegamento continuo è una grande cosa, e dovresti arrivare al punto in cui è così semplice che non è poi così doloroso. Detto questo, config.assets.precompile può prendere regex, quindi che ne dici di uno standard per file "manifest" di pignoni di primo livello, o una sottocartella standard per cose che non saranno raggruppate? (nota che non ho ancora provato questo ...)

2

Ho appena rilasciato una gemma chiamata assets_precompile_enforcer, che garantisce che gli sviluppatori non dimenticheranno di aggiungere risorse a config.assets.precompile durante lo sviluppo. Viene sollevata un'eccezione se si include una risorsa tramite javascript_include_tag o stylesheet_link_tag e non corrisponde a un filtro in config.assets.precompile.

Ciò significa che gli errori di asset verranno rilevati durante lo sviluppo, anziché essere scoperti dopo la distribuzione in produzione.

Problemi correlati