2013-07-02 20 views
11

Pracuję z kilkoma aplikacjami Railsowymi, niektóre na Railsach 3.2/Ruby 2.0 i jednym Rails 2.3/Ruby 1.8.7.Ulepszanie wolnego czasu uruchamiania Railsów (konsola szyny, serwer szyn)

To, co ich łączy, to to, że wraz z rozwojem i dodatkowymi zależnościami/klejnotami zaczynają się coraz dłużej. Rozwój, testowanie, produkcja, konsola, to nie ma znaczenia; niektóre trwają ponad 60 sekund.

Jaki jest preferowany sposób na pierwszy, profil na to, co powoduje, że czasy ładowania są tak powolne, a dwa, poprawiają czasy ładowania?

Odpowiedz

9

Ryan ma dobry tut o przyspieszeniu testy, konsoli, zadania Zgrabiarka: http://railscasts.com/episodes/412-fast-rails-commands?view=asciicast

Sprawdziłem co tam metody i znalezione „spring” najlepszy. Wystarczy uruchomić zadania jak

$ spring rspec 

czas na pierwszym biegu wiosny będą takie same jak wcześniej, ale drugi i później będzie znacznie szybciej.

Ponadto, z mojego doświadczenia będzie czas, aby zatrzymać serwer wiosny i ponownie uruchomić, gdy istnieje dziwny błąd, ale szansa jest rzadkością.

+1

Dzięki, Wiosna jest świetna! To jednak przełamuje wiele moich testów rspec/capybara. – professormeowingtons

+1

Niestety, 'wiosna', chociaż szybki i niesamowity, zdecydowanie nienawidzi rspec/kapibary. – professormeowingtons

+0

@professormeowingtons, dlaczego tak mówisz? Używam sprężyny od dawna i codziennie pracuję z rspec i czuję się dobrze. –

0

Ruby 2 aplikacji, spróbuj Zeusa - https://github.com/burke/zeus

1.8 aplikacje wydają się uruchomić znacznie szybciej niż 1,9, Spork może pomóc? http://railscasts.com/episodes/285-spork

+1

Żadna z nich nie pomaga w czasie rozruchu, po prostu po uruchomieniu następuje automatyczne sprawdzenie aplikacji, dzięki czemu można wyjąć widelce z rozgrzanego stanu. Chociaż są użyteczne, nie odnoszą się bezpośrednio do pytania OP. –

17

Jest kilka rzeczy, które mogą to powodować.

  1. Zbyt wiele przepustek GC i ogólne niedociągnięcia VM - Zobacz this answer, aby uzyskać wyczerpujące wyjaśnienie. Ruby < 2.0 ma kilka naprawdę powolnych bitów, które mogą znacznie zwiększyć prędkość ładowania; kompilacja Ruby z łatami Falcon lub railsexpress może w tym pomóc. Wszystkie wersje MRI Ruby domyślnie używają ustawień GC, które są nieodpowiednie dla aplikacji Railsowych.
  2. Wiele starszych klejnotów, które należy poddać iteracji w celu załadowania plików. Jeśli używasz bundler, spróbuj bundle clean. Jeśli używasz RVM, możesz spróbować stworzyć nowy gemset.

Jeśli chodzi o profilowanie, możesz użyć ruby-prof, aby profilować, co dzieje się po uruchomieniu aplikacji. Możesz zawinąć config/environment.rb w bloku ruby-prof, a następnie użyć go do wygenerowania raportów profilu cyklu rozruchowego z czymś podobnym do rails r ''. Może to pomóc Ci znaleźć miejsce, w którym spędzasz większość czasu podczas startu. Możesz także profilować poszczególne sekcje, takie jak konfiguracja pakietu pakującego w rozmowie boot.rb lub #initialize! w .

Coś, co może nie być brane pod uwagę to limity czasu DNS. Jeśli Twoja aplikacja wykonuje wyszukiwania DNS przy starcie, którego nie może rozwiązać, mogą one zablokować proces na $ timeout sekund (w niektórych przypadkach może to być nawet 30!). Możesz również przeprowadzić audyt aplikacji dla tych osób.

+1

@professormeowingtons Garbage Collector i maszyna wirtualna –

Powiązane problemy