bundle show gemname和gem list gemname之间的区别

My *_*God 2 gem ruby-on-rails

如果我在rails命令提示符下执行gem list rack-cache,那么它没有显示具有该名称的gem,但是如果我捆绑了show rack-cache,那么它给了我像/vendor/bundle/ruby/1.9.1/gems/rack这样的路径-cache-1.2存储gem的位置.

我没有理解这种行为,因为如果使用后一个命令在路径中存在gem,那么当我给出gem list rack-cache命令时它为什么不显示.有什么不同.

Tig*_*ine 6

混淆来自捆绑者正在解决的问题.

当您将Gems安装到系统范围的gem存储库中时,一旦有了几个应用程序,就会得到多个版本的gem.

例如,您可能最终得到3个Rails版本:3.2.8,3.2.6和3.1.0

如果您使用require railsrubygems可以使用这些版本中的任何一个,如果您最初针对3.1.0构建的应用程序与3.2.8中的某些更改不兼容,您最终会感到困惑.

Bundler所做的是准确安装Gemfile.lock中指定的gem,并将其锁定以供该应用程序使用.因此,Bundler会修改rubygems的加载路径,因此只有Gemfile.lock中的Gems才能真正用于应用程序.

因此bundle install,不是将gem安装到系统范围的gem目录中,而是安装到每个项目的不同路径.这就是为什么你在捆绑器目录中看到gem而不是系统范围的原因.如果您rack-cache通过安装,gem install也会看到它gem list.