我正在使用rbenv,为什么我的系统上有两条Gem路径? (OS X Lion)

为了澄清,我正在使用rbenv来管理我的ruby版本。 我的印象是二进制文件在各自的ruby版本目录中作为shims进行管理。

这是我的系统在运行gem环境时显示的内容(我排除了不相关的部分):

  - GEM PATHS: - /Volumes/Data/nathan/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1 - /Volumes/Data/nathan/.gem/ruby/1.9.1 

有两个地点的任何理由? 好奇的人想知道。

我想我找到了这个问题的答案,所以我会发布它。

Rbenv允许全局和/或本地版本的ruby。 因此,一旦通过rbenv安装和管理ruby,您就可以将其声明为整个系统使用的全局ruby版本。

同样,您可以在给定目录中声明本地ruby版本(例如:特定的rails项目)。

您的主路径中的.gem文件由全局ruby版本使用,其中隐藏在rbenv目录中的文件由本地ruby版本使用。

注意,您可以(无论出于何种原因)声明与全局版本相同的本地版本。 在这种情况下,本地版本将依赖于更深层次的rbenv目录中的gem文件,而不是〜/ .gem目录。

请记住,像rbenv和rvm这样的ruby版本管理器是相对较新的创作。 在它们存在之前,管理员用户通常会在系统范围的位置安装ruby,例如/ usr / local。 但非管理员需要一个地方来安装他们自己的gem,因为他们没有/ usr / local下的写权限。 因此,rubygems创建者决定在当前用户的主目录中添加辅助gem路径,该路径具有与系统位置类似的结构。

以下是gem路径在过去的样子:

  - /usr/local/lib/ruby/gems/1.9.1 - /Users/kelvin/.gem/ruby/1.9.1 

仍然可能有像这样安装ruby的机器,你仍然可以使用自动辅助宝​​石路径。 当然,您也可以使用GEM_PATH环境变量添加更多路径,但自动路径更适合处理常见情况。

如果你有管理员权限,或者你使用版本管理器,你可以忽略〜/ .gem目录作为工件,如果你愿意,可以忽略过去的遗物。

  - /Volumes/Data/nathan/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1 

是来自rbenv,所以ruby寻找安装的gemrbenv。

  - /Volumes/Data/nathan/.gem/ruby/1.9.1 

显然,rbenv并不局限于自己的gem,而是包括来自系统ruby的gem,但只包括作为用户安装的gem --user-install (通过gem --user-install )。