Ruby tips 不要使用多个 Gem 源

Gem

因为 https://rubygems.org 访问速度不佳,所以国内的同学都默认使用淘宝的镜像做备用的 Gem 源,以便加快安装 Gem 的速度。

为了一劳永逸,我直接把淘宝放到电脑的 Gem source 中,希望以后安装 Gem 时,默认走淘宝,速度更快。

> gem sources *** CURRENT SOURCES ***http://ruby.taobao.orghttps://rubygems.org

事实上这种 multi-sources 的方式一点都不快,反而变慢了!我把整个安装过程打印了出来发现:如果你有多个 Gem 源,它会挨个访问一遍,安装 Gem 的最新版本。

/Users/xiaoronglv [8:39]> gem install sidekiq --verboseGET http://ruby.taobao.org/latest_specs.4.8.gz302 Moved TemporarilyGET http://rubygems-china.oss.aliyuncs.com/latest_specs.4.8.gz200 OKGET https://api.rubygems.org/latest_specs.4.8.gz302 Moved TemporarilyGET http://ruby.taobao.org/quick/Marshal.4.8/sidekiq-3.3.0.gemspec.rz302 Moved TemporarilyGET http://rubygems-china.oss.aliyuncs.com/quick/Marshal.4.8/sidekiq-3.3.0.gemspec.rz200 OKHEAD http://ruby.taobao.org/api/v1/dependencies200 OKHEAD https://api.rubygems.org/api/v1/dependencies200 OKGET http://ruby.taobao.org/api/v1/dependencies?gems=sidekiq200 OKGET https://api.rubygems.org/api/v1/dependencies?gems=sidekiq200 OKGET http://ruby.taobao.org/api/v1/dependencies?gems=redis200 OKGET https://api.rubygems.org/api/v1/dependencies?gems=redis200 OKGET http://ruby.taobao.org/api/v1/dependencies?gems=redis-namespace200 OKGET https://api.rubygems.org/api/v1/dependencies?gems=redis-namespace200 OKGET http://ruby.taobao.org/api/v1/dependencies?gems=connection_pool200 OKGET https://api.rubygems.org/api/v1/dependencies?gems=connection_pool200 OKGET http://ruby.taobao.org/api/v1/dependencies?gems=celluloid200 OKGET https://api.rubygems.org/api/v1/dependencies?gems=celluloid200 OKGET http://ruby.taobao.org/api/v1/dependencies?gems=json200 OKGET https://api.rubygems.org/api/v1/dependencies?gems=json200 OKGET http://ruby.taobao.org/api/v1/dependencies?gems=timers200 OKGET https://api.rubygems.org/api/v1/dependencies?gems=timers200 OKGET http://ruby.taobao.org/api/v1/dependencies?gems=hitimes200 OKGET https://api.rubygems.org/api/v1/dependencies?gems=hitimes200 OKGET https://api.rubygems.org/quick/Marshal.4.8/sidekiq-3.3.0.gemspec.rz302 Moved TemporarilyGET https://au-m.rubygems.org/quick/Marshal.4.8/sidekiq-3.3.0.gemspec.rz200 OKDownloading gem sidekiq-3.3.0.gemGET https://api.rubygems.org/gems/sidekiq-3.3.0.gem302 Moved TemporarilyGET https://au-m.rubygems.org/gems/sidekiq-3.3.0.gemFetching: sidekiq-3.3.0.gem (100%)200 OK1 gem installed

Bundler

同样,有些同学会在 Gemfile 中指定多个 Gem 源。

source 'https://rubygems.org'source 'http://ruby.taobao.org'gem 'sidekiq'  gem 'redis-object'

Bundler 文档 也有详细的说明。

When attempting to locate a gem to satisfy a gem requirement, bundler uses the following priority order:

    The source explicitly attached to the gem (using :path or :git)

    For implicit gems (dependencies of explicit gems), any git or path repository otherwise declared. This results in bundler prioritizing the ActiveSupport gem from the Rails git repository over ones from rubygems.org

    The sources specified via source, searching each source in your Gemfile from last added to first added.

Bundler 会搜索所有的源,安装速度也不快。

Conclusion

如果你只是一个 Gem 的使用者,对 Gem 的实时性没有很高的要求(< 10min),就老老实实的用淘宝的 Gem 源吧,安装速度快很多。

如果你是一个 Gem 的开发者,提交 rubygems 后,淘宝十几分钟才会出现。

Ruby tips 不要使用多个 Gem 源

相关文章:

你感兴趣的文章:

标签云: