2013-07-02 9 views
11

Io lavoro con diverse app Rails, alcune su Rails 3.2/Ruby 2.0 e alcune Rails 2.3/Ruby 1.8.7.Migliora il tempo di avvio di Rails lento (console rails, server rails)

Quello che hanno in comune è che, man mano che crescono e aggiungono più dipendenze/gemme, richiedono sempre più tempo per iniziare. Sviluppo, test, produzione, console, non importa; alcuni impiegano 60+ secondi.

Qual è il modo preferito in primo luogo, il profilo per cosa sta causando tempi di caricamento così lenti e due, migliorare i tempi di caricamento?

risposta

9

Ryan ha una buona tut su accelerare i test, console, compiti rake: http://railscasts.com/episodes/412-fast-rails-commands?view=asciicast

ho controllato ogni metodi e abbiamo trovato "spring" il migliore. Basta eseguire i compiti come

$ spring rspec 

Il tempo per la vostra prima corsa di primavera sarà stessa di prima, ma il secondo e poi sarà molto più veloce.

Inoltre, dalla mia esperienza ci sarà tempo necessario per arrestare il server di primavera e riavviare quando v'è errore strano, ma la possibilità è rara.

+1

Grazie, la primavera è fantastica! Rompe molti dei miei test rspec/capybara però. – professormeowingtons

+1

Purtroppo, 'spring', anche se veloce e fantastico, sicuramente odia rspec/capybara. – professormeowingtons

+0

@professormeowingtons, perché dici questo? Ho usato la primavera per molto tempo e ho eseguito rspec ogni giorno e mi sento bene. –

0

per Ruby 2 applicazioni, provare zeus - https://github.com/burke/zeus

1.8 apps sembrano avvio molto più veloce di 1.9, spork potrebbe aiutare? http://railscasts.com/episodes/285-spork

+1

Nessuno di quelli in realtà aiuta il tempo di avvio, semplicemente controllano l'app dopo l'avvio iniziale in modo da poter rilasciare le forcelle da uno stato riscaldato. Sebbene utili, non affrontano direttamente la domanda dell'OP. –

17

Ci sono alcune cose che possono causare questo.

  1. Troppe pass GC e carenze generali della VM: vedere this answer per una spiegazione esauriente. Ruby < 2.0 ha alcuni bit veramente lenti che possono aumentare notevolmente la velocità di caricamento; compilare Ruby con le patch Falcon o railsexpress può essere di grande aiuto. Tutte le versioni di MRI Ruby utilizzano le impostazioni GC di default che non sono appropriate per le app Rails.
  2. Molte gemme legacy che devono essere ripetute per caricare i file. Se stai utilizzando bundler, prova a bundle clean. Se stai usando RVM, potresti provare a creare un nuovo gemst.

Per quanto riguarda la profilazione, è possibile utilizzare ruby-prof per il profilo di ciò che accade quando si avvia l'app. È possibile eseguire il wrapping config/environment.rb in un blocco ruby-prof, quindi utilizzarlo per generare rapporti sul profilo di un ciclo di avvio con qualcosa come rails r ''. Questo può aiutarti a rintracciare dove stai trascorrendo la maggior parte del tuo tempo all'avvio. Puoi anche profilare singole sezioni, come la configurazione del bundler in boot.rb o la chiamata #initialize! in environment.rb.

Qualcosa che potresti non considerare sono i timeout DNS. Se la tua app esegue ricerche DNS all'avvio, che non è in grado di risolvere, queste possono bloccare il processo per $ timeout secondi (che in alcuni casi potrebbero arrivare anche a 30)! Potresti controllare l'app anche per quelli.

+1

@professormeowingtons Garbage Collector e Virtual Machine –

Problemi correlati