我的 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 版本是什么。