2011-11-01 14 views
13

Sto eseguendo un'applicazione rails 3.1 sullo stack Heroku Cedar che supporta la pipeline di asset. Heroku lists 3 ways per compilare le risorseHeroku rails 3.1 app - compilazione di risorse localmente rispetto alla compilazione di risorse durante la compilazione di slug

  1. Compilare le risorse localmente.
  2. Compilare le risorse durante la compilazione di slug.
  3. Compilare le risorse durante il runtime.

Ovviamente il # 3 è negativo per le prestazioni e i documenti di Heroku consigliano anche contro di esso. Ma non sono sicuro che sia meglio tra # 1 e # 2.

# 1 richiede di eseguire rake assets:precompile e di includere la cartella public/assets in git. La tua lumaca sarà più grande ma suppongo che i tempi di fermo per l'implementazione di un sito saranno inferiori. Ma una dimensione più grande di slug significa avvio più lento delle app, quindi forse è un lavaggio.

# 2 ci vorrà più tempo per la distribuzione degli aggiornamenti a causa del precompilamento eseguito sul lato Heroku. Tuttavia, avrai una lumaca più piccola e ce n'è meno da gestire/ricordare.

La mia domanda è: quale opzione (n. 1 o n. 2) è la migliore per la produzione e perché?

Finora sembra l'opzione n. 2 ma voglio essere sicuro di non trascurare qualcosa.

+0

http://devcenter.heroku.com/articles/cdn-asset-host-rails31 è una buona lettura anche se sincronizza le risorse su S3 dalla tua app su Heroku in modo che siano ancora presenti nella tua lumaca semplicemente non servite da Heroku. –

+0

anche qualche volta # 2 non è sempre un'opzione. Heroku avrebbe sempre cercato di compilarli prima durante la compilazione di slug e se poi fallisse, lo farebbe in fase di esecuzione. –

risposta

7

ho affrontato alcuni di questi problemi e un grande Gotcha nella mia domanda qui: Rails 3.1.1 asset pipeline Heroku caching gotcha

Preferirei 2 # se ha funzionato per me, così io non devo checkin beni compilati che ha appena bloats il git repository.

La compilazione delle risorse durante la compilazione di slug non comporta alcun tempo di inattività aggiuntivo perché l'app esistente rimarrà attiva fino al completamento della compilazione di slug, quindi non preoccuparti.

Il mio consiglio sarebbe # 2 se riesci a farlo funzionare per te. Se si finisce con w/# 1, la migliore pratica sarebbe git rm -r public/assets prima del rake assets: precompilare per assicurarsi che non rimanga cruft.

+0

: l'opzione # 2 ora funziona per me dopo l'aggiornamento a Devise 1.5.0 - molto più pulito rispetto al controllo delle risorse. –

+0

Se non hai scelta tranne il numero 1, è una buona idea creare un'attività di rake per la distribuzione su Heroku. Sarebbe 1) rimuovere i beni pubici/beni 2) precompilare 3) controllare le risorse appena compilate per git 4) push to heroku. – Dty

+0

# 2 è la mia opzione preferita anche - ma sono sempre stato confuso perché sembra che ci voglia così tanto tempo per completarlo. Dovrebbe essere cat'ing una dozzina di file o giù di lì e gziping. Forse il minifying impiega più tempo per verificare la sintassi ecc.? Qualsiasi comprensione apprezzata. –

2

Potrebbe dipendere dalle dimensioni della cartella di asset, (e forse una soluzione a lungo termine sarebbe quella di mettere tali attività al di fuori dell'applicazione e li ospitare nel S3 o simili.)

In caso contrario, io sto supponendo # 1 sarebbe il migliore in produzione dal momento che qualsiasi risorsa può essere utilizzata e memorizzata immediatamente.

Sto leggendo la sezione di documentazione di Heroku su assets e sembrano indicare che il # 2 verrebbe utilizzato solo nel caso in cui abbiate dimenticato di farlo da soli, per comodità. Non si otterrà un piccolo slug, dal momento che i risultati della preparazione degli asset saranno inclusi nello slug per essere implementati.

+0

molto interessante che la dimensione della lumaca non è inferiore. Grazie per queste informazioni Ma perché il caching nella # 1 dovrebbe essere diverso dal # 2? Aggiornamento – Dty

Problemi correlati