为什么我们将Ruby 1.9.2 / 1.9.3 gem安装到1.9.1文件夹中?

这是因为gem命令使用的Gem安装目录(使用gem env时看到)设置为如下所示:

 <base_ruby_dir>/lib/ruby/gems/1.9.1 

我的问题是为什么?

不应该调用该文件夹:

 <base_ruby_dir>/lib/ruby/gems/1.9.x 

要么

 <base_ruby_dir>/lib/ruby/gems/1.9 

否则每个版本的Ruby都不能有一个,比如:

 c:/ruby191/lib/ruby/gems/1.9.1 c:/ruby192/lib/ruby/gems/1.9.2 c:/ruby193/lib/ruby/gems/1.9.3 

不是我知道的关键问题,我只是想知道。

在Ruby 1.9.0中,C界面从Ruby 1.8系列改变了。

编译为本地代码的Gem必须重新编译。

Ruby 1.9.1中的界面再次发生了变化,在Ruby 1.9.2&3中保持不变。这就解释了你在path中看到的1.9.1。

这个想法是,你可以在你的系统上安装不同版本的Ruby,并且在具有相同C api的组中共享这些gem。 所以Ruby 1.8.6和1.8.7可以分享他们的gem,Ruby 1.9.1,.2和.3也是如此。

不过,这不一定是最好的主意。 在任何情况下,大多数人使用rvm来访问不同版本的Ruby, rvm保持每个版本的gem分离,而不pipeC api版本如何。

我认为这是因为这些版本应该兼容,如果你有单独的目录,你必须重新安装所有的gem。 这样你可以升级ruby的版本,而无需重新安装所有的gem。