macOS使用brew安装用户级ruby

通过简单的脚本即可实现多版本管理

Posted by Archfish on 2019-04-13

系统自带了一个ruby,但是这个ruby是保存在系统库中的,如果需要安装gem则会提示无权限You don't have write permissions for the /Library/Ruby/Gems/2.3 directory.。那么rvm呢,这货在安装ruby-2.3版本的时候总会出现openssl问题。

所以使用brew来安装一个user级的ruby,并通过简单脚本实现ruby版本切换:

安装ruby2.3

brew install ruby@2.3

更新rubygem

gem update --system

配置环境变量

export RUBY_HOME=/usr/local/opt/ruby@2.3
export GEM_HOME=$RUBY_HOME/lib/ruby/gems/2.3.0
export GEM_PATH=$RUBY_HOME/lib/ruby/gems/2.3.0
# 记录没有ruby时的环境变量
export ORIG_PATH=$PATH
export PATH="$RUBY_HOME/bin:/usr/local/lib/ruby/gems/2.3.0/bin:$ORIG_PATH"

封装并提供切换功能

export ORIG_PATH=$PATH

function ruby_use
{
    if [ "$1" = '' ]
    then
        export RUBY_MAIN_VERSION='2.3'
    else
        export RUBY_MAIN_VERSION=$1
    fi

    export RUBY_HOME="/usr/local/opt/ruby@${RUBY_MAIN_VERSION}"
    export GEM_HOME="${RUBY_HOME}/lib/ruby/gems/${RUBY_MAIN_VERSION}.0"
    export GEM_PATH="${RUBY_HOME}/lib/ruby/gems/${RUBY_MAIN_VERSION}.0"
    export PATH="${RUBY_HOME}/bin:/usr/local/lib/ruby/gems/${RUBY_MAIN_VERSION}.0/bin:$ORIG_PATH"
}

ruby_use

在需要切换ruby版本时在相应终端使用ruby_use 版本即可.

已知问题

  • 不会自动在命令前加bundle exec, 解决办法:创建相关命令的alias。不推荐这样做alias rails='bundle exec rails',会导致rails new时报找不到Gemfile错误。
  • 暂不支持小版本控制
  • 每次切换ruby版本只会对当前终端有效(或许这是feature…

欢迎跟我交流 Archfish