常用的几个 Ruby 版本管理工具有:rvm,rbenv,ry,rbfu。rvm 应该是最早出现、使用最多的,因为过于强大以至于违背了某个 Linux 软件开发原则,所以出现了很多轻便的替代者,其中来自 37signals 的 rbenv 就很受欢迎。ry 和 rbfu 看上去更轻便,不过使用不广泛。之前使用过rvm, 这次尝试下rbenv。
我的环境是 Ubuntu14.04
rbenv的源代码托管在github,在终端中,从 github 上将 rbenv 源码 clone 到本地,然后设置 $PATH。
git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
注意 zsh用户是 ~/.zshrc
ruby-build 用来编译安装 Ruby 源码,如果选择手动编译,可不使用这个工具。
新版的Ruby编译安装有一些依赖,请参考 suggested-build-environment
我在安装的时候由于没有安装上面的依赖,碰到 The Ruby openssl extension was not compiled. Missing the OpenSSL lib? 问题,通过
apt-get install libssl-dev
解决。不过为了万全还是推荐:
apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6 libreadline6-dev zlib1g zlib1g-dev
下面是开始安装 ruby-build:
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
查看可用的 ruby版本
rbenv install --list
这里从列表中选择 2.1.2 进行安装:
rbenv install 2.1.2
等待一会儿,安装完毕后可以查看已经安装的所有 Ruby 版本:
rbenv versions
rbenv 中的 Ruby 版本有三个不同的作用域:全局(global),本地(local),当前终端(shell)。
查找版本的优先级是 当前终端 > 本地 > 全局。
4.1 设置全局版本
全局版本是在没有找到“当前终端”或“本地”作用域的设置时执行。通过以下命令设置:
rbenv global 2.1.2
4.2 设置本地版本
“本地”作用域是针对各个项目的,通过项目文件夹中的 .rbenv-version 这个文件进行管理,需要将相应的 Ruby 版本号写入这个文件。所以一般设置这个选项就可以了,这个过程可以通过以下命令执行:
rbenv local 2.1.2
4.3 设置当前终端版本
“当前终端”作用域的优先级最高。通过以下命令设置:
rbenv shell 2.1.2
4.4 使用系统Ruby
如果要使用系统原有的 Ruby,则通过 system 指定:
rbenv global system
设置完毕后可以通过以下命令进行验证:
which ruby # ~/.rbenv/shims/ruby
rbenv version # 2.1.2 (set by ~/.rbenv/version)
使用 rbenv 后,gem 还是按照原有的方式进行安装、升级,只是 gem 的安装路径是在 ~/.rbenv 文件夹中当前 Ruby 版本文件夹下。而且,安装带有可执行文件的 gem 后,需要执行一个特别的命令,告诉 rbenv 更新相应的映射关系,这个命令在安装新版本的 Ruby 后也需要执行:
rbenv rehash
很有帮助,新手很是感谢