18

澄清一下,我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

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

4

3 回答 3

15

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

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

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

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

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

于 2012-05-11T19:34:09.437 回答
6

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

以下是过去 gem 路径的示例:

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

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

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

于 2012-05-11T20:32:47.627 回答
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 并没有将自己限制在自己的 gems 中,而是包括来自系统 ruby​​ 的 gems,但仅包括作为用户安装的 gems(通过gem --user-install)。

于 2012-05-05T23:56:54.807 回答