在 Ruby 开发的世界中,经常需要面对不同项目使用不同 Ruby 版本的情况。这时,一个高效、灵活且易于使用的 Ruby 版本管理工具就显得尤为重要。

rbenv 正是这样一个工具,它允许开发者在同一台计算机上轻松安装、切换和管理多个 Ruby 版本。本文将详细介绍 rbenv 的安装、基本使用以及一些高级特性,帮助你更好地掌握这个强大的工具。

rbenv 简介

rbenv 是一个轻量级的 Ruby 版本管理工具,通过修改环境变量来控制当前使用的 Ruby 版本。它不会干扰系统自带的 Ruby 环境,而是为用户提供一个隔离的 Ruby 运行环境。这意味着你可以根据项目需求,轻松切换到所需的 Ruby 版本,确保项目的兼容性和运行稳定性。

安装 rbenv

Homebrew 安装

  1. 在 macOS (或 Linux) 系统上,建议使用 Homebrew 安装 rbenv。详细教程

    brew install rbenv ruby-build

    Homebrew 详细教程可查看:

  2. 在 shell 中加载 rbenv

    运行下面命令,并按照打印的说明进行操作:

    rbenv init

    例如,下面这个示例,我们运行 rbenv init 后,提示将 eval "$(rbenv init - zsh)" 添加到 ~/.zshrc 文件中,才能自动加载 rbenv。

    $ rbenv init
    
    # Load rbenv automatically by appending
    # the following to ~/.zshrc: eval "$(rbenv init - zsh)"
  3. 执行 source ~/.zshrc 或者关闭终端窗口并打开一个新窗口,让我们的更改生效。

克隆 Git 仓库安装

对于更自动化的安装,可以使用 rbenv-installer。如果更喜欢手动方法安装,请按照以下步骤操作。

  1. 将 rbenv 克隆到 ~/.rbenv:

    git clone https://github.com/rbenv/rbenv.git ~/.rbenv
  2. 配置 shell 来加载 rbenv: 详细教程

    • 对于 bash:

      在 macOS (或 Linux) 系统上,bash 通常通过以下方式配置 ~/.bash_profile:

      echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bash_profile
    • 对于 Zsh:

      echo 'eval "$(~/.rbenv/bin/rbenv init - zsh)"' >> ~/.zshrc

    如果你好奇,请查看此处以了解 init 的作用

  3. 执行 source ~/.zshrc 或者关闭终端窗口并打开一个新窗口,让我们的更改生效。

卸载 rbenv

rbenv 的简单性使得临时禁用或从系统中卸载它变得很容易。详细教程

  1. 禁用 rbenv 管理你的 Ruby 版本,只需从 shell 启动配置中注释或删除 rbenv init 行即可。这将从 PATH 中删除 rbenv shims 目录,并且将以后的使用(例如 ruby)将执行系统版本 Ruby,完全绕过 rbenv。

    禁用后,rbenv 仍可在命令行上访问,但你的 Ruby 应用程序不会受到版本切换的影响。

  2. 要完全卸载 rbenv,请执行步骤(1),然后删除 rbenv 根目录。这将删除安装在 `rbenv root`/versions/ 下的所有 Ruby 版本:

    rm -rf "$(rbenv root)"

    如果你已使用包管理器安装了 rbenv,则最后一步执行 rbenv 包删除:

    • Homebrew:brew uninstall rbenv
    • Debian、Ubuntu 及其衍生版本:sudo apt purge rbenv
    • Archlinux 及其衍生版本:sudo pacman -R rbenv

rbenv 基本使用

安装 Ruby 版本

rbenv install 命令不随 rbenv 一起提供,而是由 ruby​​-build 插件提供。

在尝试安装 Ruby 之前,请检查你的构建环境是否具有必要的工具和库。然后:

rbenv install -l     # 列出最新的稳定版本
rbenv install -L # 列出所有本地版本
rbenv install 3.3.0 # 安装 Ruby 版本

要对 BUILD FAILED 场景进行故障排除,请查看 ruby-build 讨论部分

如果 rbenv install 命令找不到,你可以将 ruby-build 作为插件安装:

git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

设置 Ruby 版本

安装完后,需要设置 Ruby 版本以完成安装并开始使用 Ruby,你可以使用 rbenv versions 命令查看已安装的版本列表。要切换/设置到特定版本,请运行:

rbenv global 3.3.0   # 设置本机的默认 Ruby 版本,你可以替换为你已安装的版本号
# 或:
rbenv local 3.3.0 # 设置该目录的 Ruby 版本,你可以替换为你已安装的版本号
# 或:
rbenv shell 3.3.0 # shell 环境,切换到 Ruby 3.3.0 版本,你可以替换为你已安装的版本号

除了 rbenv install 命令之外,你还可以手动下载并编译 Ruby 作为 ~/.rbenv/versions 的子目录。该目录中的内容也可以是安装在文件系统其他位置的 Ruby 版本的符号链接。

安装 Ruby gem

例如,使用 rbenv local 3.3.0 为你的项目选择 Ruby 版本。然后,像平常一样继续安装 gems:

gem install bundler

你不应该使用 sudo 来安装 gem。通常,Ruby 版本将安装在你的主目录下,因此你的用户可以写入。如果你在安装 gems 时收到“你没有写入权限”错误,则很可能你的“系统” Ruby 版本仍然是全局默认版本。使用 rbenv global <version> 更改它,然后重试。

使用 gem env 检查 gem 的安装位置:

gem env home
# => ~/.rbenv/versions/<version>/lib/ruby/gems/...

卸载 Ruby 版本

随着时间的推移,你安装的 Ruby 版本将累积在 ~/.rbenv/versions 目录中。

要删除旧的 Ruby 版本,只需 rm -rf 你要删除的版本的目录即可。你可以使用 rbenv prefix 命令查找特定 Ruby 版本的目录,例如 rbenv prefix 3.3.0

ruby-build 插件提供了 rbenv uninstall 命令来自动执行删除过程。

rbenv uninstall 3.3.0  # 自动执行删除 Ruby 版本

常用命令

你需要了解的主要 rbenv 命令是。详细教程

rbenv versions

列出 rbenv 已知的所有 Ruby 版本,并在当前活动版本旁边显示一个星号。

$ rbenv versions
system
2.7.4
* 3.3.0 (set by /Users/liam/.rbenv/version)
jruby-9.4.6.0
mruby-3.3.0
truffleruby-24.0.1

rbenv version

显示当前活动的 Ruby 版本,以及有关其设置方式的信息。

$ rbenv version
3.3.0 (set by /Users/liam/.rbenv/version)

rbenv local

通过将版本名称写入当前目录中的 .ruby-version 文件来设置本地应用程序特定的 Ruby 版本。此版本覆盖全局版本,并且可以通过设置 RBENV_VERSION 环境变量或使用 rbenv shell 命令来覆盖自身。

rbenv local 3.1.2

当不带版本号运行时,rbenv local 会报告当前配置的本地版本。你还可以取消设置本地版本:

rbenv local --unset

rbenv global

通过将版本名称写入 ~/.rbenv/version 文件来设置要在所有 shell 中使用的 Ruby 全局版本。此版本可以通过特定于应用程序的 .ruby-version 文件或通过设置 RBENV_VERSION 环境变量来覆盖。

rbenv global 3.1.2

特殊版本名称 system 告诉 rbenv 使用系统 Ruby(通过搜索 $PATH 来检测)。

当没有版本号运行时,rbenv global 报告当前配置的全局版本。

rbenv shell

通过在 shell 中设置 RBENV_VERSION 环境变量来设置特定于 shell 的 Ruby 版本。此版本覆盖特定于应用程序的版本和全局版本。

rbenv shell jruby-9.4.6.0

当没有版本号运行时,rbenv shell 会报告 RBENV_VERSION 的当前值。你还可以取消设置 shell 版本:

rbenv shell --unset

请注意,你需要启用 rbenv 的 shell 集成(安装说明的步骤 3)才能使用此命令。如果你不想使用 shell 集成,你可以简单地自己设置 RBENV_VERSION 变量:

export RBENV_VERSION=jruby-9.4.6.0

rbenv rehash

为 rbenv 已知的所有 Ruby 可执行文件安装 shims (~/.rbenv/versions/*/bin/*)。通常你不需要运行此命令,因为它会在安装 gems 后自动运行。

rbenv rehash

rbenv which

显示给定可执行文件的,的完整路径。

$ rbenv which irb
/Users/liam/.rbenv/versions/3.3.0/bin/irb

rbenv whence

列出包含指定可执行文件名称的所有 Ruby 版本。

$ rbenv whence rackup
3.3.0
jruby-9.4.6.0
truffleruby-24.0.1

环境变量

名称 默认 描述
RBENV_VERSION 指定要使用的 Ruby 版本。另请参阅 rbenv shell
RBENV_ROOT ~/.rbenv 定义 Ruby 版本和 shims 所在的目录。另请参阅 rbenv root
RBENV_DEBUG 输出调试信息。例如:rbenv --debug <subcommand>
RBENV_HOOK_PATH 查看 wiki 搜索 rbenv hooks 查看路径列表
RBENV_DIR $PWD 开始搜索 .ruby-version 文件的目录

插件支持

rbenv 还支持通过插件来扩展功能。例如,ruby-buildrbenv-vars 插件可以让你更方便地安装和管理 Ruby 版本。你可以通过 Homebrew 或直接从 Git 仓库安装这些插件,并使用它们来简化 Ruby 版本的安装和管理过程。

ruby-build

安装 ruby-build 插件的命令如下。详细教程

# 通过 Homebrew 安装
brew install ruby-build # 或者通过 Git 安装
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

安装完成后,你可以使用 ruby-build 命令来安装和管理 Ruby 版本,而无需手动下载和编译 Ruby 源代码。

ruby-vars

安装 rbenv-vars 插件的命令如下。详细教程

# 通过 Homebrew 安装
brew install rbenv-vars # 或者通过 Git 安装
git clone https://github.com/rbenv/rbenv-vars.git "$(rbenv root)"/plugins/rbenv-vars

安装完成后,你可以使用 ruby-vars 命令让你在生成 Ruby 进程之前设置全局和特定于项目的环境变量。

结语

rbenv 是一个功能强大的 Ruby 版本管理工具,它允许开发者在同一台计算机上轻松安装、切换和管理多个 Ruby 版本。通过使用 rbenv,你可以确保你的项目在正确的 Ruby 环境中运行,从而提高开发效率和代码质量。

随着 Ruby 生态系统的不断发展,rbenv 将继续成为开发者不可或缺的工具之一。希望本文能帮助你更好地理解和使用 rbenv,为你的 Ruby 开发之旅提供便利!

相关链接

访问博址 liam-i.github.io 获取更佳阅读体验和最新内容。

rbenv:Ruby 多版本管理利器的更多相关文章

  1. Python 多版本管理利器 pythonbrew

    在$HOME目录中管理python安装 简介 pythonbrew是受 perlbrew 和 rvm 启发,在用户的$HOME目录中进行python构建和安装自动化的项目. 另一衍生版本 : pyth ...

  2. linux下的node版本管理利器:nvm

    nvm是一款node版本管理工具,简单来说,如果你想在一个环境下安装多个node版本,并向自由地切换相关版本,那你就需要使用nvm进行版本管理,有点类似pyenv,也是一款python版本管理工具. ...

  3. centos 6.x安装rvm 配置 Ruby开发环境

    rvm是ruby的版本管理工具  还可对ruby进行 安装 卸载 等 1.安装 curl #  sudo yum install  curl #  curl -L  get.rvm.io | bash ...

  4. 【Ruby on Rails 学习一】ubuntu14.04配置rvm与ruby

    要安装ruby,首先要安装rvm,借助rvm安装ruby rvm 的全称是 Ruby Version Manager ,是一款由 Wayne E. Seguin  开发的一款命令行工具.rvm 能够让 ...

  5. 阿里云ubuntu16.04安装ruby

    0x0 准备 环境:阿里云轻量服务器ubuntu16.04 目的:安装beef需要的ruby环境 更新软件 sudo apt-get update sudo apt-get upgrade sudo ...

  6. RVM Ruby 管理工具

    1.RVM 简介 1.1 Ruby 简介 Ruby 是一种面向对象的脚本语言,简单易用,功能强大.能跨平台和可移植性好等等.其实就是种脚本语言. Ruby 的软件源使用的是亚马逊的云服务,国内网络环境 ...

  7. centos 6.5安装rvm 配置 Ruby开发环境

    我是用ruby写测试脚本用  安装rvm也是费了好大劲  英文不易看懂 ,是个硬伤! rvm是ruby的版本管理工具  还可对ruby进行 安装 卸载 等 1.安装 curl #  sudo yum ...

  8. Ruby系列文章之1---开发者应该熟悉的10个工具

    1. Git Git是进入Ruby这个生态圈首先最应该学会的工具.几乎所有以Ruby开发出来的套件都放在Github上.也就是不管你要下载或修改协作都需要透过Git. 2. RVM Ruby有很多种i ...

  9. Mac 开发者设置强迫症

    Latest commit 2461787 on Mar 1 原文链接 强迫症的 Mac 设置指南 如何配置一个高效的 Mac 工作环境 English Version Table of Conten ...

  10. python编程【环境篇】- 如何优雅的管理python的版本

    简介 之前的文章(Python2还是python3 )中我们提到,建议现在大家都采用python3,因为python2在今年年底将不在维护.但在实际的开发和使用python过程中,我们避免不了还得用到 ...

随机推荐

  1. openGauss支持国密SM3和SM4算法

    国密算法介绍 国密即国家密码局认定的国产密码算法,主要有 SM1,SM2,SM3,SM4.密钥长度和分组长度均为 128 位.针对银行客户对数据库安全能力的诉求以及提高产品安全竞争力的要求,进行数据库 ...

  2. 《深入理解Java虚拟机》读书笔记:运行时栈帧结构

    代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. 一.概述 在Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚拟机执行引擎的统 ...

  3. 在python中实现二叉树

    二叉树设计 定义节点类 class Node: # 修改初始化方法 def init(self,value): self.value = value # 节点值 self.left = None # ...

  4. Mac OS 中JDK 环境(jdk 1.8.0_831)安装配置、环境变量配置及卸载操作

    前言: 摊牌了,本来就有点喜新厌旧的我,特意把系统和开发环境都拉到比较高,想试验一下兼容性和某些新特性,探索了一下新大陆,也见识了各种光怪陆离的妖魔鬼怪. 因为要着手云平台项目的重构改版和新系统的架构 ...

  5. springboot多模块项目启动经历

    springboot多模块使用 @ 目录 springboot多模块使用 前言 大佬把项目权限给我了,我就先下下来看看学习一下 一.识别 二.maven配置 1.安装maven 三.加载刷新 总结 前 ...

  6. iOS的cer、p12格式证书解析监控

    之前博客写过直接解析ipa包获取mobileprovision文件来监控APP是否过期来,但APP的推送证书还没有做, 大家都知道,iOS的推送证书不会放到ipa包里,只能通过直接解析p12或cer. ...

  7. leetcode - 子数组最大平均值

    给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示例: 输入:[1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5-6+5 ...

  8. Django框架——模版层之标签、自定义过滤器 标签及inclusion_tag(了解)、模版的继承与导入、模型层之前期准备、ORM常用关键字

    模版层之标签 {% if 条件1(可以自己写也可以用传递过来的数据) %} <p>今天又是周三了</p> {% elif 条件2(可以自己写也可以用传递过来的数据) %} &l ...

  9. 系列解读 SMC-R (二):融合 TCP 与 RDMA 的 SMC-R 通信 | 龙蜥技术

    ​简介:本篇以 first contact (通信两端建立首个连接) 场景为例,介绍 SMC-R 通信流程. ​ 文/龙蜥社区高性能网络SIG 一.引言 通过上一篇文章 <系列解读SMC-R:透 ...

  10. [TP5] 浅谈 ThinkPHP 的 Hook 行为事件及监听执行

    TP5 中使用 \think\Hook::add('xx', '\app\xxx\behavior\Xx') 注册行为. 也可以在 application/tags.php 中统一注册. 在需要监听执 ...