在 Ubuntu 中为特定版本的 Ruby 安装 Ruby Gem

在 Ubuntu 中为特定版本的 Ruby 安装 Ruby Gem

我的 Ubuntu 操作系统上有 Ruby 1.8 和 Ruby 1.9.1。当我执行 时gem install php_http_build_query,它会将 gem 安装到 Ruby 1.8。我如何让它将其安装到 Ruby 1.9.1?

答案1

前言 RVM(Ruby 版本管理器)可能是最好的长期替代方案。

我相信我了解您的情况,因为我以前使用 Ubuntu 12.04 时也遇到过这种情况。在经历了这些困难之后,我了解到在系统上管理 Ruby 的最佳方法是使用RVM(Ruby 版本管理器)。它不是官方 Ubuntu/Debian 包管理器设置的一部分,但如果您认真对待 Ruby 开发,RVM 是设置和使用多个 Ruby 版本而不发生冲突的最佳方式。

但是如果您只是使用 Ruby 1.9.1 并且只是希望将其识别为默认 Ruby 版本,请执行以下操作。

也就是说,如果你的设置中 RVM 不能满足你的需求,或者你更喜欢使用 Ruby 1.9.1,请继续阅读...

因此,我假设您通过 Ubuntu 12.04 中的默认存储库安装了 Ruby 1.8,然后 — — 事后 — — 意识​​到您需要 Ruby 1.9.1,因此您通过如下命令安装它:

sudo aptitude install ruby1.9.1 ruby1.9.1-dev \
                      rubygems1.9.1 irb1.9.1 ri1.9.1 rdoc1.9.1 \
                      build-essential libopenssl-ruby1.9.1 \
                      libssl-dev zlib1g-dev

嗯,那将要在你的系统上安装 Ruby 1.9.1,但是它惯于将 Ruby 1.9.1 设​​为默认值。获取此设置的关键是使用update-alternatives作为官方update-alternatives手册页解释道:

可以同时在单个系统上安装多个具有相同或类似功能的程序。例如,许多系统会同时安装多个文本编辑器。这为系统用户提供了选择,允许每个用户根据需要使用不同的编辑器,但如果用户未指定特定的首选项,程序将很难为要调用的编辑器做出良好的选择。

Debian 的备选系统旨在解决此问题。文件系统中的通用名称由提供可互换功能的所有文件共享。备选系统和系统管理员共同确定此通用名称引用哪个实际文件。

因此在这种情况下,您需要采取三个步骤才能使 Ruby 1.9.1 正确识别为系统上的默认 Ruby。

首先,运行此命令:

sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.9.1 400 \
                         --slave   /usr/share/man/man1/ruby.1.gz ruby.1.gz \
                                   /usr/share/man/man1/ruby1.9.1.1.gz \
                         --slave   /usr/bin/ri ri /usr/bin/ri1.9.1 \
                         --slave   /usr/bin/irb irb /usr/bin/irb1.9.1 \
                         --slave   /usr/bin/rdoc rdoc /usr/bin/rdoc1.9.1

接下来,update-alternatives再次运行以选择您的 Ruby 解释器。这也会更改核心 Ruby 项目的符号链接:

sudo update-alternatives --config ruby

做出选择,然后转到update-alternatives相关的 Ruby GEM:

sudo update-alternatives --config gem

最后,确认 Ruby 的版本已更新,如下所示:

 ruby --version

答案2

使用绝对路径将特定版本的 gem 安装到特定版本的 ruby​​ 中。例如/opt/sensu/embedded/bin/gem install vmstat

ruby -v
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]

/opt/sensu/embedded/bin/ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

即使我的默认版本是 ruby​​ 1.9.3p392,我也可以安装特定于 ruby​​ 2.3.0p0 的 gem。

答案3

这不是最好的解决方案,但我很着急。我进入文件/var/lib/gems/1.8/gems/夹并将内容复制到/var/lib/gems/1.9.1/gems文件夹中。我在 1.9.1 中没有 gems 文件夹,所以我不得不手动创建它。

答案4

这些gem命令还带有每个版本的文件名。请查看这个包例如:它包含gem1.8。这意味着你可以定位你想要的 Ruby 版本,而不管系统默认的 Ruby 版本是什么。

相关内容