![](/img/trans.png)
[英]How do I figure out why my rails 3 app, using mod_rails, is so slow?
[英]Why is rails bootstrap so slow and what can I do about it?
Rails 3.0是一只嚴肅的狗。 我已經在Rails上開發了5年,而且啟動時從未如此慢。 特別是,測試需要永遠在帶有SSD的頂級MacBook上進行自舉,因此迭代周期會受到嚴重影響。 每次開始測試我都需要閱讀一篇文章。 這是瘋狂而不是“敏捷”。 我不妨編譯。
這是我最終從Rails繼續前進的主要動機 - 當我有機會的時候。
如果有人有解決方案,請提供。 我知道很多人都患有這個問題。
我不使用rspec - 我知道有一個解決方案來幫助測試rspec。
我正在使用faster_require和rails-dev-boost,但沒有重大影響。
我在ruby 1.9.2並且需要。 在具有4Gb RAM和SSD的雙核2.13 Ghz MacBook Air上進行一次非常簡單的控制器測試需要26秒! 為什么!?
看看spork 。 它本質上運行一個小型服務器,它運行引導,然后等待測試運行,允許你引導一次,然后從該狀態多次測試。 如果對配置進行某些更改,您偶爾會重新啟動它,但在大多數情況下,它可以讓您進行非常快速的紅綠重構迭代。
引用Yehuda Katz:
有些事情需要C代碼在1.9中做的事情會減慢速度。 一個這樣的例子是重新檢查$ LOAD_PATH以確保它在所有需求上都被擴展。 這是ruby-core應該解決的問題。 如果沒有redmine,我會在redmine上打開一張票。
我也遇到了這個問題,$ LOAD_PATH問題似乎是一個潛在的原因。 讓我們希望很快得到修復。
所以聽起來像你只需要忍受這一點,希望它將在Ruby 1.9.3中修復。
問題似乎是需求的緩慢,如果你做一些最小的分析,如
CPUPROFILE=/tmp/my_app_profile RUBYOPT="-r`gem which perftools | tail -1`" ruby -I lib:test test/unit/user_test.rb
pprof.rb --text /tmp/my_app_profile
你可能應該看到很多時間花在require上(另一個選擇是在裝載夾具中看到很多但是我猜你已經知道這不是問題)。
在我的盒子里(osx在macbook pro 2011 13“上,核心i5和旋轉硬盤驅動器),時間大約為5秒,這仍然很多,但更容易忍受,所以也許值得調查差異。
你在系統中安裝了多少顆寶石? 您是否嘗試在沒有bundler / rubygems的情況下運行測試/啟動?
支付不必編寫“要求”聲明是一種權衡。 Rails正在嘗試做正確的事情,因此預先加載一切。 基本上你有兩個解決方案:
盡管如此,使用解決方案1)。 讓我的套件運行不到半秒(只有70次測試,但是等待Rails加載的次數很少)
是的,它的速度非常緩慢。 哦等等,在我的java天mvn install
永遠不會花不到一分鍾。 使用mvn clean install
它很瘋狂。 快樂的日子,記住總會讓我的精神振作起來。
正如@hammar建議的那樣,+1 spork
結合guard
https://github.com/guard/guard-test自動啟動測試,你有一個殺手組合。 讓它在自己的窗口和/或屏幕上運行,看看你的工作效率上升:)
更新/補充回答:
優化提示:在application.rb中添加到autoload_paths的路徑上放置to_s
,避免它一遍又一遍地手動執行此操作。 可能會刮掉幾秒鍾......
正如@ user185374說,你付出的權衡require
。
我偶然發現了一個有趣的資源來加速Rails
測試而不使用Rails
......這個例子是用Rspec
給出的,但你會有邏輯。
以下是作者總結的方式:
我無法告訴你在2秒內運行我所有的150多個規格意味着什么。 我認為這是一項額外的工作,但值得付出努力!
我剛發現的另一個解決方案: Hydra
並行測試:
http://logicalfriday.com/2011/05/18/faster-rails-tests-with-hydra/
這是一個已知問題,特別是在Ruby 1.9.2上。
好消息是,有一個補丁可以極大地加速Ruby的啟動( require
)。
好消息。 升級到Ruby 1.9.3后,Rails在一段可容忍的時間內啟動。
看看宙斯寶石 。
這應該會顯着加快速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.