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

Nat*_*han 16 ruby rubygems rbenv

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

这是我的系统在运行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
Run Code Online (Sandbox Code Playgroud)

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

Nat*_*han 15

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

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

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

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

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

  • 我使用`gem which%gemname%`来确定安装gem的路径. (6认同)

Kel*_*vin 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
Run Code Online (Sandbox Code Playgroud)

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

如果您拥有管理员权限,或者你使用版本管理器,你可以,如果你会忽略〜/ .gem DIR为神器,过去的遗迹.