macOS Sierra设置rbenv和Ruby

What is Ruby (ルビィ) (误)


其实是这个:

Ruby is…

A dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write.

最近接触了jekyll,所以需要在macOS上搭建一个Ruby的环境。折腾后发现坑其实不少,最后使用了rbenv + ruby-build的方法。

macOS配置Ruby的问题

Ruby版本多

首先,我的macOS里已经安装过多个Ruby。去年研究rails的时候直接使用homebrew安装过Ruby,但是实际上安装Xcode后应该已经安装了一个命令行的Ruby。如果还购买过mac的Server.app(128RMB的那个),那个app里还会自带一个Ruby,情况就更加复杂了……

gem权限乱

其次,之前安装的gem似乎有权限问题,并不是在用户目录下执行安装等各种操作。如果使用sudo权限安装,安装好的各种包也是root权限,就需要永远sudo下去,这个显然不合适。

对于问题2,stackoverflow上有一个不错的解决方法,手动配置gem使用user-install,然而不能完全解决问题一。于是从rails官网挪了一份文档,使用rbenv + ruby-build
来解决这个问题。

安装rbenv前

卸载rvm

之前如果安装过rvm,需要先卸载

1
rvm implode

卸载完成后,rvm会提醒用户,检查.bashrc.bash_profile等bash配置文件(或zsh对应的配置文件)里还有没有相关路径,以及/etc/~下还有没有残余目录,都需要手动删除。

卸载已安装的gem包

之前使用gem安装的一些包,最好也先卸载掉,使用

1
gem uninstall -aIx

如果使用sudo权限安装过包,则上述语句无法卸载root权限的包,需要再做一步

1
sudo gem uninstall -aIx

如果之前配置过gem使用user-install,则还需要在~/.gem中有和没有相关配置时各执行一遍,确保卸载干净。

卸载brew安装的Ruby

1
brew uninstall ruby

安装rbenv和ruby-build

1
2
brew update # 可选
brew install rbenv ruby-build

然后向~/.bash_profile里添加信息

1
echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile

对于zsh(oh-my-zsh)用户,因为会从~/.zshrc里读取,所以就在zshrc里加了一行source ~/.bash_profile

然后安装Ruby

1
2
rbenv install 2.3.1
rbenv global 2.3.1

因为是编译安装,所以等待时间稍长。安装完成后可以用ruby -v检查一下版本是不是刚刚安装的2.3.1。

使用gem安装需要的包

以jekyll为例

1
gem install jekyll

为了确保rbenv可以执行刚刚安装的包, 一定要做

1
rbenv rehash

这样rbenv才能“看到”新安装的包。

安装完成后就可以测试一下刚安装的包jekyll -v,并尝试调用。

需要注意,以上所有步骤应该都不需要sudo。如果其中某些步骤还提示权限问题,请仔细检查步骤。

Tips:关于gem换源

之前使用的是淘宝源,现在已交给Ruby China维护。
因此原来配置的ruby.taobao.org,现在要改成gems.ruby-china.org才能用w