为了澄清,我正在使用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
有两个地点的任何理由?好奇的人想知道。
答案 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
)。