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

时间:2012-05-03 13:30:17

标签: ruby rubygems rbenv

为了澄清,我正在使用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

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

3 个答案:

答案 0 :(得分:15)

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

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

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

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

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

答案 1 :(得分:6)

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

以下是过去宝石路径的样子:

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

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

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

答案 2 :(得分:2)

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

来自rbenv,因此ruby会查找已安装的gems rbenv。

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

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