Ubuntu 升级 Ruby 版本


使用 rvm 管理 ruby 版本

这是推荐的方式, 但是由于 GFW 的原因, rvm 不一定安装成功, 如果不成功则参考下面的从源码安装.

Reference: 在ubuntu中安装及使用rvm管理ruby版本

准备工作

后面需要使用 curl, 用 dpkg -s curl 命令检查一下系统中有没有安装

abbuggy@abbuggy-ubuntu:~$ dpkg -s curl
Package: curl
Status: install ok installed
Priority: optional
Section: web
Installed-Size: 338
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: i386
Version: 7.22.0-3ubuntu4
Replaces: curl-ssl
Provides: curl-ssl
Depends: libc6 (>= 2.7), libcurl3 (>= 7.16.2-1), zlib1g (>= 1:1.1.4)
Description: Get a file from an HTTP, HTTPS or FTP server
 curl is a client to get files from servers using any of the supported
 protocols. The command is designed to work without user interaction
 or any kind of interactivity.
 .
 curl offers a busload of useful tricks like proxy support, user
 authentication, FTP upload, HTTP post, file transfer resume and more.
Homepage: http://curl.haxx.se
Original-Maintainer: Ramakrishnan Muthukrishnan <rkrishnan@debian.org>

上面的说明我是已经安装过了的, 如果没有安装应该是类似如下的回显:

abbuggy@abbuggy-ubuntu:~$ dpkg -s curl
系统没有安装软件包 curl, 因而没有相关的信息.
使用 dpkg --info (= dpkg-deb --info) 来检测打包好的文件,
还可以通过 dpkg --contents (= dpkg-deb --contents) 来列出它们的内容.

那么安装就行了 sudo apt-get install curl

安装 rvm

用 rvm 官方推荐的方式安装 curl -L get.rvm.io | bash -s stable

回显提示我们, RVM 被安装在 $HOME/.vrm 中, 并且需要在终端中加载脚本 $HOME/.rvm/scripts/rvm

abbuggy@abbuggy-ubuntu:~$ curl -L get.rvm.io | bash -s stable
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   185  100   185    0     0    144      0  0:00:01  0:00:01 --:--:--   906
100 10235  100 10235    0     0   3929      0  0:00:02  0:00:02 --:--:-- 10888
Downloading RVM from wayneeseguin branch stable
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   131  100   131    0     0     62      0  0:00:02  0:00:02 --:--:--   143
100 1124k  100 1124k    0     0   127k      0  0:00:08  0:00:08 --:--:--  269k

Installing RVM to /home/abbuggy/.rvm/
    RVM PATH line found in /home/abbuggy/.bashrc /home/abbuggy/.zshrc.
    RVM sourcing line found in /home/abbuggy/.bash_profile /home/abbuggy/.zprofile.

# RVM:  Shell scripts enabling management of multiple ruby environments.
# RTFM: https://rvm.io/
# HELP: http://webchat.freenode.net/?channels=rvm (#rvm on irc.freenode.net)
# Cheatsheet: http://cheat.errtheblog.com/s/rvm/
# Screencast: http://screencasts.org/episodes/how-to-use-rvm

# In case of any issues read output of 'rvm requirements' and/or 'rvm notes'

Installation of RVM in /home/abbuggy/.rvm/ is almost complete:

  * To start using RVM you need to run `source /home/abbuggy/.rvm/scripts/rvm`
    in all your open shell windows, in rare cases you need to reopen all shell windows.

# abbuggy,
#
#   Thank you for using RVM!
#   I sincerely hope that RVM helps to make your life easier and more enjoyable!!!
#
# ~Wayne

应该请把这句话加在 $HOME/.bash_profile 文件中, 以便在开启一个终端会话时候加载 RVM:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session.

如果对 shell 不熟悉, 这里简单解释一下这是干什么用的:

[[condition]] 两层的方括号中间括着条件返回条件是不是真, -s 是判断给定的文件是否存在的命令.

这样一来, 不就是在 [[ -s "$HOME/.vrm/scripts/vrm"]] 判断刚才安装的 RVM 是否存在吗?

接下来的&&符号是“短路的与”, 当前面的条件是真的时候, 执行后面的语句, 返回这两个语句是不是全是真.

在这里, 利用了”短路”特性, 也就是说当 RVM 已经安装的话, 执行后面的 $HOME/.rvm/scripts/rvm 命令.

这条命令和 source "$HOME/.rvm/scripts/rvm" 是一个意思: 加载 rvm 的启动脚本.

现在, 通过修改 .bash_profile 增加的内容需要重新打开终端窗口时加载, 或者另一个是在当前窗口执行一遍 $HOME/.rvm/scripts/rvm.

使用 RVM

察看 RVM 的版本

rvm -v

rvm 1.16.20 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

然后通过 rvm requirements 命令, 可以察看安装各版本时候的前提条件, 其中现在这句是需要关注的, 这是安装依赖的第三方包, 没有这个安装不成功岂不是很悲剧?

Additional Dependencies:
# For Ruby / Ruby HEAD (MRI, Rubinius, & REE), install the following:
  ruby: /usr/bin/apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config

这样一来, 安装 ruby 的准备工作就完成了, 察看当前 RVM中 已经安装的 ruby 版本, 现在应该还没有.

rvm list

rvm rubies

# No rvm rubies installed yet. Try 'rvm help install'.

察看 RVM 可供安装的 ruby 版本:

rvm list known
# MRI Rubies

[ruby-]1.8.6[-p420]
[ruby-]1.8.7-p370
[ruby-]1.8.7[-p371]
[ruby-]1.9.1[-p431]
[ruby-]1.9.2-p180
[ruby-]1.9.2-p290
[ruby-]1.9.2-p318
[ruby-]1.9.2[-p320]
[ruby-]1.9.2-head
[ruby-]1.9.3-preview1
[ruby-]1.9.3-rc1
[ruby-]1.9.3-p0
[ruby-]1.9.3-p125
[ruby-]1.9.3-p194
[ruby-]1.9.3-p286
[ruby-]1.9.3-[p327]
[ruby-]1.9.3-head
[ruby-]2.0.0-preview1

例如安装 ruby 1.9.3-head, 在不发生歧义的情况下方括号内的东西可以不必敲.

rvm install 1.9.3-head

之后等呀等呀自动安装了 1.8.7 和 1.9.3

rvm list

rvm rubies

   ruby-1.8.7-p371 [ i686 ]
   ruby-1.9.3-head [ i686 ]

# Default ruby not set. Try 'rvm alias create default <ruby>'.

选择 1.9.3 作为当前的使用版本, 并且设置为缺省

rvm use ruby-1.9.3-head --default
Using /home/abbuggy/.rvm/gems/ruby-1.9.3-head

设置好之后察看ruby版本

ruby -v
ruby 1.9.3p327 (2012-11-10) [i686-linux]

察看ruby的路径, 就是 RVM 帮我们安装的

which ruby
/home/abbuggy/.rvm/rubies/ruby-1.9.3-head/bin/ruby

从源码安装

如果你不能安装 RVM, 那就尝试从源码安装吧.

Reference: Setup Ruby On Rails on Ubuntu 14.04 Trusty Tahr

为避免和当前 Ruby 冲突, 先卸载当前版本:

sudo apt-get remove ruby1.8

sudo apt-get autoremove

然后安装新版本的 Ruby:

wget http://ftp.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

tar -xzvf ruby-2.3.1.tar.gz

cd ruby-2.3.1/

./configure

make

sudo make install

安装完查看下版本: ruby -v.

使用 Travis Client 推荐的方法

由于我使用第二种方法成功安装了, 因为这种方法我没测试过, 先记录下再说…

Reference: Travis Client Github

先卸载当前版本:

sudo apt-get remove ruby1.8

sudo apt-get autoremove

然后安装新版本:

sudo apt-get install python-software-properties
sudo apt-add-repository ppa:brightbox/ruby-ng
sudo apt-get update
sudo apt-get install ruby2.1 ruby-switch ruby2.1-dev
sudo ruby-switch --set ruby2.1