Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby I';我使用的是rbenv,那么为什么我的系统上有两个Gem路径呢?(狮子座)_Ruby_Rubygems_Rbenv - Fatal编程技术网

Ruby I';我使用的是rbenv,那么为什么我的系统上有两个Gem路径呢?(狮子座)

Ruby I';我使用的是rbenv,那么为什么我的系统上有两个Gem路径呢?(狮子座),ruby,rubygems,rbenv,Ruby,Rubygems,Rbenv,为了澄清,我正在使用rbenv来管理我的ruby版本。我的印象是二进制文件在各自的ruby版本目录中作为垫片进行管理 以下是我运行gem环境时系统显示的内容(我排除了不相关的部分): 有没有理由有两个地点?好奇的人想知道 - /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.

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

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

有没有理由有两个地点?好奇的人想知道

 - /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并不局限于它自己的gems,而是包括了systemruby中的gems,但只包括那些以用户身份安装的gems(通过
gem--user install
)。

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

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

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

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


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

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

下面是一个例子,说明了在过去,gem路径是什么样子的:

 - /usr/local/lib/ruby/gems/1.9.1
 - /Users/kelvin/.gem/ruby/1.9.1
可能仍然有这样安装ruby的机器,并且您仍然可以使用自动辅助gem路径。当然,您也可以使用GEM_PATH环境变量添加更多路径,但是auto-one非常适合处理常见情况


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

好吧,就是这样。。。我没有那样安装任何gems。我做了一个干净的操作系统安装,安装了homebrew>rbenv>ruby>rails。在安装rails之前,我还通过rbenv立即设置了全局ruby。在我的rails项目中,我使用bundler和Gemfile。所以我就是不明白为什么会有后一个目录,你是说?echo$GEM_路径?它不返回任何内容。我使用
gem which%gemname%
来确定安装gem的路径。
 - /usr/local/lib/ruby/gems/1.9.1
 - /Users/kelvin/.gem/ruby/1.9.1