为什么gems安装在一个目录中,其Ruby版本与我正在运行的版本不同?

当我安装gem时,它被安装在一个名为1.9.1的目录中,尽管它不是我安装的Ruby版本:

$ ruby -v ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin12.2.0] $ gem which rails .../ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails.rb 

为什么会这样? 我没有安装其他Ruby版本(当然不是v1.9.1)。

请注意,在撰写本文时,以下内容也适用于所有后续的Ruby版本,而不仅仅是1.9.2。


根据1.9.2发布公告 :

标准库安装在/usr/local/lib/ruby/1.9.1

此版本是“库兼容版本”。 Ruby 1.9.2几乎兼容1.9.1,因此该库安装在1.9.1目录中。

即使它安装在编号不同的目录中,它也使用1.9.2。 RubyGems可以通过gem env显示它正在使用的所有目录。

这确保了一组已安装的gems仅用于它们实际可以运行的版本(特别是由于编译的C扩展),并且当升级到更新但是“库兼容”的版本时,不需要重新安装所有gem。

我相信这是因为他们共享相同的标准库。

1.9.2核心有一些重要的升级,但我认为标准库中的任何内容都没有改变,因此它们共享相同的路径。 不过没什么值得担心的 – 正如你所说,一切都运转良好。