我正在使用 chruby 进行版本管理,并且正在克隆一个不幸的是 Ruby 1.8.7 中的项目。是否可以使用 chruby 安装 Ruby 1.8.7?我在为这个过程寻找资源时遇到了麻烦。
6 回答
TL;博士
你不能,至少不使用ruby-install。Ruby 1.8.7已停产,Postmodern 的 ruby-install 工具已放弃对它的支持。
Ruby 1.8.7 不受支持
控制台错误消息可能会因您安装的库和编译器而异,但未经修改的 Ruby 1.8.7 不太可能在更新的系统上编译。例如,在 Ubuntu 13.10 上:
$ ruby-install ruby 1.8.7
[lots of output elided]
math.c:37:13: error: missing binary operator before token "("
#elif define(ERANGE)
^
make: *** [math.o] Error 1
!!! Compiling ruby 1.8.7 failed!
为什么 Ruby 1.8.7 不受支持
Postmodern 于 2013 年 12 月 9 日放弃了对 Ruby 1.8.7 的支持。提交f013ed2解释说:
commit f013ed2476ecce82ea41ff63de413daf2231b82b
Author: Postmodern <postmodern.mod3@gmail.com>
Date: Mon Dec 9 16:09:30 2013 -0800
Drop support for Ruby 1.8.x since it has reached End-of-Life.
* CVE-2013-4164 affects Ruby 1.8.x and there is no official patch.
Enabling users to install and run 1.8.x at this point is irresponsible.
备择方案
您的选择包括:
- 升级到 Ruby 的较新稳定版本,例如Ruby 2.1.0。
- 使用RVM等 Ruby 版本管理器,在撰写本文时,它仍然支持 Ruby 1.8.6-p420 和 1.8.7-p374。
- 使用ruby-build而不是 ruby-install。按照自述文件中关于使用 ruby-build 的 chruby 说明,确保chruby 可以找到您新安装的 Ruby。
- 在chruby可以找到的地方手动安装1.8.7,然后用chruby来管理。
我们确实删除了0.4.0 版本中的所有解决方法补丁和 1.8.x 特定代码。但是,如果您在较旧的系统(使用较旧版本的 GCC、openssl 等)上安装 ruby 1.8.7,它仍然应该可以编译。1.8.7不会在较新版本的 GCC、openssl 等的较新系统上编译。如果确实需要安装 1.8.7,可以尝试使用选项应用RVM的 1.8.7 补丁--patch
;尽管运行一个严重修补的 ruby 是有风险的。此外,RedHat 和 Debian 仍在为其企业用户维护 ruby 1.8.7 软件包。
您可以使用ruby -build 维护 MRI 1.8.7 的定义。
然后通过执行以下操作安装 1.8.7:
ruby-build 1.8.7-p375 /opt/rubies/1.8.7-p375
不幸的是chruby
不再支持 1.8.7。通过使用 rvm 安装 1.8.7 并将其链接到 ,我设法使其工作/运行~/.rubies
,如下所示:
\curl -sSL https://get.rvm.io | bash
rvm install 1.8.7-head
ln -s ~/.rvm/rubies/ruby-1.8.7-head ~/.rubies/ruby-1.8.7
如果您使用的是 OS X(10.11,El Capitan),您可以使用ruby -build 安装 Ruby 1.8.7 ,chruby可以使用它:
brew install ruby-build
brew install openssl libyaml libffi
brew install apple-gcc42
brew install openssl098
mkdir -p ~/.rubies
brew link openssl098 --force
ruby-build 1.8.7-p375 ~/.rubies/ruby-1.8.7
brew unlink openssl098
chruby 1.8.7
解决方法是使用 apt-get 安装 ruby
apt-get install ruby
接下来告诉 chruby 使用系统 ruby。
chruby system
为了持久性,将其添加到 ruby 版本文件中
echo 'system' > .ruby-version