2011-01-27 84 views
2

编辑:有点不同(和更少)的瓶颈用捆扎机1.0.9代替1.0.3。RubyGems的和捆扎机:慢速启动

我对Rails的的慢启动时间非常恼火(因为我反复运行测试),所以我试图找出使用poor-man's profiling的罪魁祸首,通过运行rails console --help(它加载我所有的宝石)反复,击中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>' 

如此看来,相当长的一段时间花费加载gemspecs。

是否有某种方式来加速这个吗?肮脏的黑客也是赞赏 - 我只想运行我的测试套件没有(很多)延迟。

+1

捆绑1.0.3真的在我看来马车。安装最新的,我认为它的1.0.9。 – 2011-01-27 21:37:15

+0

啊,运行`bundle update`时它不会被更新。当然,我猜。所以我跑了`sudo gem update bundler`,现在我的版本是1.0.9。再试一次,它看起来可能稍微快一些,瓶颈现在在`rubygems`包中。我会在一秒内更新这个问题。 – 2011-01-27 21:51:38

回答

1

更新到这一点:tconsole实在是太酷,如果你正在使用MINITEST。