2011-01-27 4 views
2

編集:1.0.3の代わりにBundler 1.0.9のボトルネックとは多少異なります。RubygemsとBundler:遅いスタートアップ

は、私は(私が繰り返しテストを実行するため)のRailsの遅い起動時間によってひどく悩まさので、私は打つ、繰り返し(すべての私の宝石をロードする)rails console --helpを実行することにより、poor-man's profilingを使用している犯人を見つけようとしていますCtrl + Cキーを押し、スタックトレースを確認します。別に

時間のactive_supportや友人などの明白な犯人がロードされてから、いくつかの(おそらく10%程度)、出力は次のようになります。

$ rails console --help 
^C/var/lib/gems/1.9.1/specifications/i18n-0.5.0.gemspec:3:in `new': Interrupt 
    from /var/lib/gems/1.9.1/specifications/i18n-0.5.0.gemspec:3:in `load_specification' 
    from /usr/lib/ruby/1.9.1/rubygems/source_index.rb:95:in `eval' 
    from /usr/lib/ruby/1.9.1/rubygems/source_index.rb:95:in `load_specification' 
    from /usr/lib/ruby/1.9.1/rubygems/source_index.rb:153:in `block (2 levels) in load_gems_in' 
    from /usr/lib/ruby/1.9.1/rubygems/source_index.rb:152:in `each' 
    from /usr/lib/ruby/1.9.1/rubygems/source_index.rb:152:in `block in load_gems_in' 
    from /usr/lib/ruby/1.9.1/rubygems/source_index.rb:149:in `reverse_each' 
    from /usr/lib/ruby/1.9.1/rubygems/source_index.rb:149:in `load_gems_in' 
    from /usr/lib/ruby/1.9.1/rubygems/source_index.rb:345:in `refresh!' 
    from /usr/lib/ruby/1.9.1/rubygems/source_index.rb:78:in `from_gems_in' 
    from /usr/lib/ruby/1.9.1/rubygems/source_index.rb:58:in `from_installed_gems' 
    from /usr/lib/ruby/1.9.1/rubygems.rb:866:in `source_index' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/source.rb:161:in `installed_specs' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/source.rb:151:in `block in fetch_specs' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/index.rb:7:in `build' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/source.rb:150:in `fetch_specs' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/source.rb:65:in `specs' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/definition.rb:159:in `block (2 levels) in index' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/definition.rb:158:in `each' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/definition.rb:158:in `block in index' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/index.rb:7:in `build' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/definition.rb:157:in `index' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/definition.rb:151:in `resolve' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/definition.rb:90:in `specs' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/definition.rb:135:in `specs_for' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/definition.rb:124:in `requested_specs' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/environment.rb:23:in `requested_specs' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler/runtime.rb:11:in `setup' 
    from /var/lib/gems/1.9.1/gems/bundler-1.0.9/lib/bundler.rb:101:in `setup' 
    from /home/jo/src/mercury/config/boot.rb:8:in `<top (required)>' 
    from <internal:lib/rubygems/custom_require>:29:in `require' 
    from <internal:lib/rubygems/custom_require>:29:in `require' 
    from script/rails:5:in `<main>' 

だから、かなりの時間があるようですgemspecをロードするのに費やした。

これをスピードアップする方法はありますか?汚いハックも評価されています - 私はちょうど(非常に)遅れずにテストスイートを実行したいです。

+1

bundler 1.0.3は私の意見では本当にバグだった。最新のものをインストールして、私は1.0.9と思う。 –

+0

ああ、 'bundle update'を実行しても更新されません。もちろん、私は推測します。だから私は 'sudo gem update bundleler'を走らせて、今バージョン1.0.9を持っています。もう一度やり直すと、少し速いかもしれないようで、ボトルネックは現在 'rubygems'パッケージに入っています。私はこの質問を1秒で更新します。 –

+0

ちょうど更新:明らかに少し速いものでした。ポインタありがとう!今すぐgemspecの読み込み時間のために... –

答えて

2

あなたはsporkを試しましたか?

+0

うわー - 私が*尋ねたべき質問に答えることに感謝します。 :)私はsporkを愛している、それはすべての私の起動時の問題を解決します。実際、Ruby 1.9/minitestはサポートしていませんが、spokeを使用できるようにRSpecにすべてのテストを移行するのはとても素晴らしいことです。 :) –

+0

素晴らしい:)ええ、それは本当にクールです。 – Mauricio

1

更新:tconsoleは、MiniTestを使用している場合は本当にクールです。

関連する問題