2013-07-02 56 views
11

我使用幾個Rails應用程序,一些使用Rails 3.2/Ruby 2.0,一些使用Rails 2.3/Ruby 1.8.7。改進緩慢的Rails啓動時間(Rails控制檯,Rails服務器)

他們的共同之處在於,隨着他們的成長和增加更多的依賴/寶石,他們需要的時間越來越長。開發,測試,生產,控制檯,沒關係;有些需要60+秒。

什麼是首選的方式,什麼是導致加載時間如此緩慢的配置文件,以及兩個,改善加載時間?

回答

9

瑞安關於加快測試,操作檯,耙任務的好嘖嘖:http://railscasts.com/episodes/412-fast-rails-commands?view=asciicast

我已經檢查每一個方法那裏,發現「spring」是最好的。只要運行的任務,如

$ spring rspec 

的時間爲你的春天第一次運行會像以前一樣,但第二個和以後會快很多。

另外,從我的經驗來看,有時候您需要停止彈簧服務器並在發生奇怪錯誤時重新啓動,但機會很少。

+1

謝謝,春天太棒了!它確實打破了我的許多rspec /水豚測試。 – professormeowingtons

+1

不幸的是,'春天',雖然快速和真棒,絕對討厭rspec /水豚。 – professormeowingtons

+0

@professormeowingtons,你爲什麼這麼說?我一直在使用spring很久,並且每天都運行rspec並且感覺很好。 –

0

紅寶石2級的應用程序,嘗試宙斯 - https://github.com/burke/zeus

1.8應用程序似乎引導除1.9快得多,叉勺可能幫助? http://railscasts.com/episodes/285-spork

+1

這些實際上都不會有助於啓動時間,它們只是在初次啓動後對應用程序進行檢查點操作,以便您可以從加熱狀態中分出叉。雖然有用,但它們沒有直接解決OP的問題。 –

17

有幾件事情會導致這種情況。

  1. GC通道過多和一般虛擬機缺陷 - 請參閱this answer以獲得全面的解釋。紅寶石< 2.0有一些非常慢的位,可以顯着提高加載速度;用Falcon或railsexpress補丁編譯Ruby可以大大地幫助。所有版本的Ruby Ruby默認使用不適合Rails應用程序的GC設置。
  2. 許多遺留的寶石必須迭代才能加載文件。如果您使用捆綁軟件,請嘗試bundle clean。如果你使用RVM,你可以嘗試創建一個新的gemset。

就分析而言,您可以使用ruby-prof來分析啓動應用程序時發生的情況。您可以將config/environment.rb包裝在ruby-prof模塊中,然後使用它來生成類似rails r ''之類的啓動週期的配置文件報告。這可以幫助您追蹤您將大部分時間花在引導中的位置。您也可以分析個別部分,如boot.rb中的打包程序設置或environment.rb中的#initialize!調用。

你可能不會考慮的東西是DNS超時。如果您的應用在啓動時執行了DNS查找(無法解析),則這些操作可能會阻止$ timeout秒(在某些情況下可能高達30)!您也可以審覈這些應用。

+1

@professormeowingtons垃圾收集器和虛擬機 –