如何在Linux上用rbenv安装Ruby

很久没有碰Ruby了,最近想把GitHub上的一个项目clone到本地build时,才发现新装的CentOS上连Ruby都没有,于是就有了这篇文章。

Ruby官网上列了4种不同的安装方法:

  • 使用系统软件包管理系统,如Ubuntu的apt-get,CentOS的yum,macOS上常用的homebrew等
  • 使用Ruby专门的安装程序,如ruby-build,ruby-install,windows上的exe执行文件等
  • 使用rbenv,RVM等支持安装及切换不同Ruby版本的管理工具
  • 下载ruby tarball后手动编译安装

如果你有在多个不同版本的Ruby间切换的需求,rbenv应该是个不错的选择,而且从各方评价来看,rbenv似乎要高于RVM。

这是rbenv的源代码和官网:https://github.com/rbenv/rbenv,有非常详细的说明。

我的机器是CentOS 7,但是其他Linux的版本安装流程应该基本一样。

第一步把源代码clone到本地~/.rbenv目录中

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
Cloning into '/home/centos/.rbenv'...
remote: Counting objects: 2714, done.
remote: Total 2714 (delta 0), reused 0 (delta 0), pack-reused 2714
Receiving objects: 100% (2714/2714), 506.40 KiB | 0 bytes/s, done.
Resolving deltas: 100% (1700/1700), done.

这步非必需:编译bash extension,主要是为了加速rbenv运行,可能会报错,可以忽略。我发现我连gcc都没安装,安装后并没有报错

$ cd ~/.rbenv && src/configure && make -C src
warning: gcc not found; using CC=cc
aborted: compiler not found: cc
$ sudo yum install gcc
$ cd ~/.rbenv && src/configure && make -C src
make: Entering directory `/home/centos/.rbenv/src'
gcc -fPIC     -c -o realpath.o realpath.c
gcc -shared -Wl,-soname,../libexec/rbenv-realpath.dylib  -o ../libexec/rbenv-realpath.dylib realpath.o
make: Leaving directory `/home/centos/.rbenv/src'

第二步添加环境变量。注意,如果是Ubuntu的话应该编辑.bashrc而不是.bash_profile

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

第三步运行初始化,并根据提示把eval那个语句添加到.bash_profile

$ ~/.rbenv/bin/rbenv init
# Load rbenv automatically by appending
# the following to ~/.bash_profile:

eval "$(rbenv init -)"

$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

第四步重启shell,或者直接在当前窗口运行source ~/.bash_profile以让刚才添加的环境变量等生效

source ~/.bash_profile

第五步用rbenv-doctor验证安装是否成功。可以看到有一条指令未安装的提醒,我们在下一步就安装。

$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
Checking for `rbenv' in PATH: /home/centos/.rbenv/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: which: no rbenv-install in (/home/centos/.rbenv/shims:/home/centos/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/centos/.local/bin:/home/centos/bin:/home/centos/.local/bin:/home/centos/bin)
bash: line 114: : command not found
 ()
Counting installed Ruby versions: none
  There aren't any Ruby versions installed under `/home/centos/.rbenv/versions'.
  You can install Ruby versions like so: rbenv install 2.2.4
Checking RubyGems settings: OK
Auditing installed plugins: OK

第六步安装ruby-build

$ mkdir -p "$(rbenv root)"/plugins
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
Cloning into '/home/centos/.rbenv/plugins/ruby-build'...
remote: Counting objects: 8867, done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 8867 (delta 8), reused 18 (delta 2), pack-reused 8843
Receiving objects: 100% (8867/8867), 1.86 MiB | 0 bytes/s, done.
Resolving deltas: 100% (5684/5684), done.

从GitHub clone到本地后并不需要额外操作。下面我们再来验证一下是否安装成功

$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
Checking for `rbenv' in PATH: /home/centos/.rbenv/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: which: no rbenv-install in (/home/centos/.rbenv/shims:/home/centos/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/centos/.local/bin:/home/centos/bin:/home/centos/.local/bin:/home/centos/bin)
/home/centos/.rbenv/plugins/ruby-build/bin/rbenv-install (ruby-build 20180601)
Counting installed Ruby versions: none
  There aren't any Ruby versions installed under `/home/centos/.rbenv/versions'.
  You can install Ruby versions like so: rbenv install 2.2.4
Checking RubyGems settings: OK
Auditing installed plugins: OK

至此rbenv就安装完成啦!下面我们来随心所欲地安装和切换不同版本的Ruby!使用rbenv install -l可以列出所有可选的Ruby版本。列表太长就不把输出贴出来了。

先安装一个2.3.0吧。但是,等了半天又报错了…

$ rbenv install 2.3.0
Downloading ruby-2.3.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...

BUILD FAILED (CentOS Linux 7 using ruby-build 20180601)

Inspect or clean up the working tree at /tmp/ruby-build.20180602035853.9426
Results logged to /tmp/ruby-build.20180602035853.9426.log

Last 10 log lines:
The Ruby openssl extension was not compiled.
The Ruby readline extension was not compiled.
The Ruby zlib extension was not compiled.
ERROR: Ruby install aborted due to missing extensions
Try running `yum install -y openssl-devel readline-devel zlib-devel` to fetch missing dependencies.

Configure options used:
  --prefix=/home/centos/.rbenv/versions/2.3.0
  LDFLAGS=-L/home/centos/.rbenv/versions/2.3.0/lib
  CPPFLAGS=-I/home/centos/.rbenv/versions/2.3.0/include

原来是缺少一些依赖包,这些都安装完后再试试

$ sudo yum install -y openssl-devel readline-devel zlib-devel
$ rbenv install 2.3.0
Downloading ruby-2.3.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...
Installed ruby-2.3.0 to /home/centos/.rbenv/versions/2.3.0

耐心等待几分钟后终于成功!顺手再装2个版本吧。然后使用rbenv versions便会列出本地安装的所有Ruby版本,如果要切换到某个特定版本就用rbenv global <version number>即可

$ rbenv install 2.5.0
Downloading ruby-2.5.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.bz2
Installing ruby-2.5.0...
Installed ruby-2.5.0 to /home/centos/.rbenv/versions/2.5.0
$ rbenv install 2.4.0
Downloading ruby-2.4.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.bz2
Installing ruby-2.4.0...
Installed ruby-2.4.0 to /home/centos/.rbenv/versions/2.4.0
$ rbenv global 2.3.0
$ rbenv versions
* 2.3.0 (set by /home/centos/.rbenv/version)
  2.4.0
  2.5.0
$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

我在安装Ruby稳定版的过程中并没有遇到问题,但是在安装非稳定版本和jruby时都报错了,估计是新系统还缺少很多依赖包导致的。

关于卸载Ruby和卸载rbenv在官方的documentation里都有详细说明,非常简单直接,这里就不一一展开了。

视频demo: https://v.youku.com/v_show/id_XMzY1NzYxMTkyOA==.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容