首页 ruby安装
文章
取消

ruby安装

OSX中自带了一个ruby版本,但是由于这个ruby版本比较旧,并且使用起来总会有各种错误,于是想要安装一个新的ruby版本。

OSX上安装ruby主要有以下方式:

  1. 直接通过osx的包管理器brew进行安装。
  2. 通过chruby配合ruby-install进行安装管理多个版本ruby。
  3. 通过rbenv配合插件rb-build安装管理多个版本的ruby。
  4. 通过官方提供rvm(ruby version manager)进行管理。

ruby的版本安装和管理方式有很多中,建议只选用其中一种便可,不要混着用,容易导致命令版本的混用和配置错误。

这里我们采用第三种安装方式进行安装, 第三种方式最直观,没有那么多的自动化。其原理和管理也与jenv一致,对于熟悉这个java多版本管理工具的同学比较友好。

一. rbenv安装

rbenv安装可以通过brew包管理命令安装, 或者手动克隆仓库进行安装,这里直接使用克隆仓库的方式。

  1. 克隆rbenv的git仓库

    1
    2
    
    mkdir ~/.rbenv
    git clone https://github.com/rbenv/rbenv.git ~/.rbenv
    
  2. 基于克隆出来的rbenv仓库进行编译

    1
    
    cd ~/.rbenv && src/configure && make -C src
    
  3. 添加path环境变量的执行路径

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

    小tips: 不管使用的是哪种shell,建议都在那个bash的配置文件中source一下~/.bash_profile,这样不管用哪种shell配置文件都能用同一个

  4. 执行初始化rbenv的初始化,这里主要做的就是配置各种环境变量

    1
    
    ~/.rbenv/bin/rbenv init
    
  5. 重启shell窗口, 因为第4步中的各种环境变量需要重新初始化shell才能生效

  6. 检查安装是否完整

    1
    
    curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
    

    这个时候你的输出应该是下面这个样子的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    Checking for `rbenv' in PATH: /Users/lee/.rbenv/bin/rbenv
    Checking for rbenv shims in PATH: OK
    Checking `rbenv install' support: not found
    Unless you plan to add Ruby versions manually, you should install ruby-build.
    Please refer to https://github.com/rbenv/ruby-build#installation
       
    Counting installed Ruby versions: none
      There aren't any Ruby versions installed under `/Users/lee/.rbenv/versions'.
      You can install Ruby versions like so: rbenv install <version>
    Checking RubyGems settings: OK
    Auditing installed plugins: OK
    

    上面提示你,没有安装ruby-build,如果想支持rbenv install命令安装ruby的多个版本的话需要在安装ruby-build插件

二. ruby-build安装

  1. 新建rbenv插件文件夹

    1
    
    mkdir ~/.rbenv/plugins
    
  2. 克隆ruby-build插件仓库至rbenv的插件目录中

    1
    
    cd ~/.rbenv/plugins && git clone https://github.com/rbenv/ruby-build.git
    
  3. 这样就完成了安装了, 下面再执行上面的检查命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     ~/.rbenv/plugins $ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
    Checking for `rbenv' in PATH: /Users/lee/.rbenv/bin/rbenv
    Checking for rbenv shims in PATH: OK
    Checking `rbenv install' support: /Users/lee/.rbenv/plugins/ruby-build/bin/rbenv-install (ruby-build 20220426-3-g1038c07)
    Counting installed Ruby versions: none
      There aren't any Ruby versions installed under `/Users/lee/.rbenv/versions'.
      You can install Ruby versions like so: rbenv install 3.1.2
    Checking RubyGems settings: OK
    Auditing installed plugins: OK
    

三. ruby安装

直接执行命令 rbenv install 3.1.2, 便可以进行安装了。最后所有安装的ruby版本都会在 /Users/lee/.rbenv/versions/目录下。

最后执行检查命令将会如下

1
2
3
4
5
6
7
 ~/.rbenv/plugins $ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
Checking for `rbenv' in PATH: /Users/lee/.rbenv/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /Users/lee/.rbenv/plugins/ruby-build/bin/rbenv-install (ruby-build 20220426-3-g1038c07)
Counting installed Ruby versions: 1 versions
Checking RubyGems settings: OK
Auditing installed plugins: OK

rbenv常用命令:

1
2
3
rbenv local [版本号]            #设置当前文件夹的ruby版本
rbenv global [版本号]           #设置全局ruby版本
rbenv versions                 #查看已安装的ruby版本

3.1 校验安装是否正确

通过which命令检验安装的版本是否正确

1
2
3
4
5
6
 ~ $ which ruby
/Users/lee/.rbenv/shims/ruby
 ~ $ which gem
/Users/lee/.rbenv/shims/gem
 ~ $ which bundler
/Users/lee/.rbenv/shims/bundler

可以看到成功正常安装后,命令指向的地址均为~/.rbenv,安装与配置完成。

如果which命令输出的是一个函数, 或者指向的地址不是~/.rbenv, 那就需要检查一下PATH环境变量设置是否正确。

四. 常见问题处理

4.1 openssl build失败问题

image-20220713110445195

使用命令rbenv install 3.1.2安装ruby 3.1.2版本时openssl安装失败,原因是使用的这个openssl版本的一个bug,少了一个头部声明,详见test/v3ext.c fails to compile on MacOS11 arm64

openssl 问题的通用办法:

  1. 确定旧版本

    这个版本不行,那我们就换一个旧一点的openssl版本。下面是openssl的几个常用站点:

  2. 修改ruby-build配置,替换旧版本openssl

    rbenv install xxx的是通过委托到ruby-build进行安装的。

    ruby-build安装配置文件位于{ruby-build安装目录}/share/ruby-build/xxx版本号,我们修改3.1.2的配置文件如下:将openssl-1.1.1q换成opensslp版本,替换下载链接

    1
    2
    
    install_package "openssl-1.1.1p" "https://www.openssl.org/source/old/1.1.1/openssl-1.1.1p.tar.gz" openssl --if needs_openssl_102_300
    install_package "ruby-3.1.2" "https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz#61843112389f02b735428b53bb64cf988ad9fb81858b8248e22e57336f24a83e" ldflags_dirs enable_shared standard verify_openssl
    
  3. 重新执行rbenv install 3.1.2, 安装成功

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    rbenv install 3.1.2                           
    Downloading openssl-1.1.1p.tar.gz...
    -> https://www.openssl.org/source/old/1.1.1/openssl-1.1.1p.tar.gz
    Installing openssl-1.1.1p...
    Installed openssl-1.1.1p to /Users/lee/.rbenv/versions/3.1.2
       
    Downloading ruby-3.1.2.tar.gz...
    -> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz
    Installing ruby-3.1.2...
    ruby-build: using readline from homebrew
       
    Installed ruby-3.1.2 to /Users/lee/.rbenv/versions/3.1.2
    
本文由作者按照 CC BY 4.0 进行授权

缓存常见问题与解决方案

像素与分辨率