本文主要介绍安装rbenv和Ruby2.0的过程。
Ruby 2.0都出来好一段时间了,咱也赶个时髦刷新一下,现在用的版本还是1.8.7呢。
安装环境:MBP OX S 10.8.3
1. 事先准备
有些东西是前提条件,需要保证完成如下两个包的安装。
1.1. Command Line Tools
编译Ruby需要c编译器,所以要在系统里提前安装Xcode并安装Command Line Tools
1.2. ruby-build
编译Ruby用的,它是一个rbenv的plugin,实际上rbenv install命令就是它提供的。
$ brew install ruby-build
2. 安装rbenv和需要的包
2.1. 什么是rbenv?
简单来说,因为Ruby的稳定版和开发版本比较多,所以有很多需要同时支持几个版本的需求,rvm和rbenv就是干这个的。
rbenv年纪小于rvm,设计之初就是以简单为主,比如连编译ruby都不是自己来做,而是使用了ruby-build。另外,更重要的是它和Bundler配合的很好,这对Rails开发者来说很重要。
2.2. 安装rbenv
mac下可以直接用brew安装rbenv,还算方便,只需如下命令即可:
$ brew install rbenv
但是,有些工作还是需要手工来做的,比如执行上面这条命令后,会打印出如下信息:
To enable shims and autocompletion add to your profile:
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
所以我们需要做的下一步就是把***"if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi"***这行加到~/.profile文件里,最后的profile文件可能会像这样:
$ cat .profile
# for rbenv
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
上述安装完成之后,通过如下命令就可以另起一个shell进行后续操作了:
$ exec $SHELL -l
备注:
关于rbenv的更多内容和使用方法请参考 [rbenv的主页] (https://github.com/sstephenson/rbenv)。
2.3. 安装openssl等包
为了使Ruby和Rails等正常运行,需要安装openssl等包。
2.3.1. 安装openssl和readline
readline是为了在irb等输入亚洲语言的
$brew install readline openssl
2.3.2. 安装curl-ca-bundle
在命令行里执行***"brew install curl-ca-bundle'***即可:
$ brew install curl-ca-bundle
To use these certificates with OpenSSL:
export SSL_CERT_FILE=/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt
然后,拷贝证书文件:
$ cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
重要
上面这个命令是否必须请各自尝试,根据网上资料,如果是brew安装的openssl,可能会有问题,需要执行这条拷贝命令。
我执行了这条语句,在访问https的网站时候能正常访问,详见本文最后部分。但这不一定说如果你不执行这条命令就不能正常运行。
3. 安装并设置Ruby2.0
上面的各种准备完成之后,就可以安装Ruby了。
3.1. 安装Ruby2.0包
首先,通过rbenv 命令来确认可以使用的版本都有哪些:
$ rbenv install -l | grep "2\.0\.0"
2.0.0-dev
2.0.0-p0
2.0.0-p195
2.0.0-preview1
2.0.0-preview2
2.0.0-rc1
2.0.0-rc2
rbx-2.0.0-dev
rbx-2.0.0-rc1
从上面命令结果可以看出来,2.0的版本很多,我们选择最新的p195来安装。
安装某一版本的Ruby使用rbenv install VER 即可,其中VER是版本号在这里。
安装的时候,需要指定编译选项。我们通过编译选项指定了openssl的位置。
$ RUBY_CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.0.0-p195
Downloading ruby-2.0.0-p195.tar.gz...
-> http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p195.tar.gz
Installing ruby-2.0.0-p195...
Installed ruby-2.0.0-p195 to /Users/liubin/.rbenv/versions/2.0.0-p195
重要
RUBY_CONFIGURE_OPTS是传给ruby-build的环境变量,主要是为config(编译用)设置参数。网上有资料用的不是RUBY_CONFIGURE_OPTS,而是CONFIGURE_OPTS,具体这俩个参数的区别,就是RUBY_CONFIGURE_OPTS设置的参数只会影响MRI(Matz' Ruby Implementation),只会传给Ruby,而不会给其它lib。
具体参见ruby-build的主页里对这两个参数的说明。
3.2. rehash
rbenv安装包之后,需要rehash:
$ rbenv rehash
命令很简单,但是这里我们还是简单了解下rehash是干什么的及为什么需要它。
简单来说,rbenv通过shims机制,在系统和各个版本间做个link,即解决了如何在用户输入ruby等命令后找到对应的真正的ruby执行体。
shims存放在***${RBENV_ROOT}/shims***下面,里面有ruby,gem,irb等命令,都是脚本文件,可以自己查看。
在两种情况下需要rehash,一是安装一个新版本的Ruby之后,第二个就是在安装某些提供了os命令(即非简单lib)的gem包,这些包会提供命令,所以会影响$PATH,所以也必须放到shims下。这两个场景,都需要进行rehash操作。
当然,每次都rehash是挺麻烦的,而且最关键最重要的是如果漏了的话会导致命令等不能执行。
还好,有这么个gem,叫做rbenv-rehash,利用它可以实现在每次安装gem后自动执行rbenv的rehash操作。
我们可以通过gem安装rbenv-rehash:
$ gem i rbenv-rehash
Successfully installed rbenv-rehash-0.3
Parsing documentation for rbenv-rehash-0.3
1 gem installed
更多关于rehash的内容,可以参考rbenv的主页里关于rehash的说明
3.3. 设定系统默认Ruby版本
系统里有多个Ruby版本存在的时候,我们需要设置一个默认的使用版本。
3.3.1. 查看当前Ruby版本
通过rbenv versions命令来查看系统已经安装的版本和当前的默认使用版本:
$ rbenv versions
- system (set by /Users/liubin/.rbenv/version)
2.0.0-p195
可见,现在版本还是原来的,而不是我们新安装的版本。
3.3.2. 设置系统的默认Ruby版本
通过rbenv global命令来设置系统默认的Ruby版本:
$ rbenv global 2.0.0-p195
再通过rbenv versions命令来确认上面的修改是否生效了:
$ rbenv versions
system
- 2.0.0-p195 (set by /Users/liubin/.rbenv/version)
$ ruby -v
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0]
可见,当前系统默认版本已经是Ruby2.0了。
4. 确认安装是否正确
其实主要是确认openssl是否可用,因为这个功能被很多地方用到。
irb(main):002:0> require 'openssl'
=> true
irb(main):005:0> open('https://www.google.com/').read
以上命令如果不出问题,说明安装基本正常了。
另外,可以用这句话来确认是否系统里可以正常处理YAML
require 'psych'
5. 总结
rbenv很简单,很方便。不过,话说谁没事老换Ruby版本呢?
至此,Ruby2.0的安装可以说是告一段落了,下面将会安装Rails4.0,请关注后续文章。
参考文章
- [rbenv を使って ruby 2 系 をインストール、ついでに rails4 までやってみる一部始終] (http://inokara.hateblo.jp/entry/2013/04/21/023840)
- rbenv主页