有没有简单的方法来安装Ruby的gem目前安装的Ruby版本?

这似乎应该是显而易见的,但我一直没有find办法做到这一点。

我的基本问题是:我已经在Scientific Linux 6系统上安装了Ruby 1.8.7(从基础知识库)。 我试图通过gem install来安装一些gem,但是我遇到了很多需要ruby 1.9或更高版本的gem。

我可以通过-v参数指定单独的gem版本,但是gem install似乎总是select可用于任何gem依赖项的最高版本,所以即使我限制了我想要的gem版本,我的安装仍然会失败,因为其中一个依赖关系将需要Ruby 1.9。 我想要的一些gem的依赖树是深广的; 需要花费大量的时间来手动确定我需要的每个依赖关系的版本,然后手动安装每个所需的gem,然后才能按我所需的方式工作。 (这是依赖pipe理应该解决的问题。)

所以:有没有办法告诉Ruby,“只安装gem foo ,只能用于当前安装版本的Ruby”? (甚至,“安装gem foo的 xyz版本,只使用可与当前安装的Ruby版本兼容的gem”?)

正如我所提到的,我碰巧在Scientific Linux 6上运行Ruby 1.8.7,但是我怀疑任何解决scheme都将是特定于平台的。

不要使用系统ruby为自己的程序。 它的目的是提供用Ruby编写的系统应用程序,而且只有Red Hat才支持这些应用程序。

相反,使用Ruby版本pipe理器(如rvm或rbenv),您可以使用它运行当前的Ruby版本以及您可能需要用于自己的程序的任何gem。

如果您需要供应商支持,您也可以使用红帽软件集合的Ruby版本。

使用Bundler

有没有“简单”的方法来做到这一点,但一个实用的select是使用Bundler来pipe理你的gem。 对Github的一个评论build议在您select的Ruby上创build一个严格版本要求的gem,然后让Bundler处理剩余的依赖关系。

我不确定这是否会在所有情况下都能正常工作。 有些gem,特别是老的gem,可能不会指定可选的required_ruby_version ,因此可能仍然是可以安装的。 然而,当你碰到这样的gem时,你可以使用Bundler的版本约束表示法手动将你需要的版本固定在Gemfile中。