rbenv 是类 Unix 系统上 Ruby 编程语言的版本管理器工具。它对于在同一台计算机上的多个 Ruby 版本之间切换以及确保您正在处理的每个项目始终在正确的 Ruby 版本上运行非常有用。
rbenv 在安装时将自身注入到您的 PATH 中后,任何对ruby
、 gem
、 bundler
或其他 Ruby 相关可执行文件的调用都将首先激活 rbenv 。然后, rbenv 扫描当前项目目录中名为.ruby-version
文件。如果找到,该文件将确定应在该目录中使用的 Ruby 版本。最后, rbenv 在~/.rbenv/versions/
下安装的版本中查找该 Ruby 版本。
您可以为您的项目选择 Ruby 版本,例如:
cd myproject
# choose Ruby version 3.1.2:
rbenv local 3.1.2
这样做将使用您选择的版本在当前目录中创建或更新.ruby-version
文件。您的另一个目录中的不同项目可能正在使用完全不同的 Ruby 版本 - 当您切换项目时,rbenv 将从一个 Ruby 版本无缝过渡到另一个版本。
最后,rbenv 机制的几乎每个方面都可以通过 bash 编写的插件进行定制。
rbenv 的简单性有其优点,但也有一些缺点。有关更多详细信息和一些替代方案,请参阅版本管理器的比较。
在具有 Homebrew 包管理器的系统上,建议使用“使用包管理器”方法。在其他系统上,“Basic Git Checkout”可能是确保始终安装最新版本的 rbenv 的最简单方法。
使用以下方法之一安装 rbenv。
在 macOS 或 Linux 上,我们建议使用 Homebrew 安装 rbenv。
brew install rbenv
[!警告]
在官方 Debian 和 Ubuntu 存储库中打包和维护的 rbenv 版本已经过时。要安装最新版本,建议使用 git 安装 rbenv。
sudo apt install rbenv
Archlinux 有一个适用于 rbenv 的 AUR 软件包,您可以使用此 wiki 页面中的说明从 AUR 安装它。
Fedora 有一个官方软件包,您可以安装:
sudo dnf install rbenv
设置您的 shell 来加载 rbenv。
rbenv init
关闭终端窗口并打开一个新窗口,以便您的更改生效。
就是这样!您现在可以安装一些 Ruby 版本了。
笔记
对于更自动化的安装,您可以使用 rbenv-installer。如果您不想执行从 Web URL 下载的脚本或只是更喜欢手动方法,请按照以下步骤操作。
这将使您可以使用最新版本的 rbenv,而无需进行系统范围的安装。
将 rbenv 克隆到~/.rbenv
。
git clone https://github.com/rbenv/rbenv.git ~ /.rbenv
设置您的 shell 来加载 rbenv。
~ /.rbenv/bin/rbenv init
如果您好奇,请参阅此处了解init
作用。
重新启动 shell 以使这些更改生效。 (打开一个新的终端选项卡通常就可以了。)
手动安装 rbenv 时,注意各种 shell 的完成脚本如何工作可能会很有用。完成脚本通过扩展部分输入的 rbenv 命令名称和选项标志来帮助键入 rbenv 命令;通常,这是通过在交互式 shell 中按Tab键来调用的。
rbenv 的bash完成脚本随项目一起提供,并由rbenv init
机制加载。
zsh完成脚本随项目一起提供,但需要添加到 zsh 中的 FPATH 中,然后 shell 才能发现它。一种方法是编辑~/.zshrc
:
# assuming that rbenv was installed to `~/.rbenv`
FPATH= ~ /.rbenv/completions: " $FPATH "
autoload -U compinit
compinit
rbenv 的Fish完成脚本随 Fish shell 本身一起提供,并且不由 rbenv 项目维护。
rbenv install
命令并不随 rbenv 一起提供,而是由 ruby-build 插件提供。
在尝试安装 Ruby 之前,请检查您的构建环境是否具有必要的工具和库。然后:
# list latest stable versions:
rbenv install -l
# list all local versions:
rbenv install -L
# install a Ruby version:
rbenv install 3.1.2
要对BUILD FAILED
场景进行故障排除,请查看 ruby-build 讨论部分。
笔记
如果没有找到rbenv install
命令,您可以将 ruby-build 作为插件安装:
git clone https://github.com/rbenv/ruby-build.git " $( rbenv root ) " /plugins/ruby-build
设置 Ruby 版本以完成安装并开始使用 Ruby:
rbenv global 3.1.2 # set the default Ruby version for this machine
# or:
rbenv local 3.1.2 # set the Ruby version for this directory
除了rbenv install
命令之外,您还可以手动下载并编译 Ruby 作为~/.rbenv/versions
的子目录。该目录中的条目也可以是安装在文件系统其他位置的 Ruby 版本的符号链接。
例如,使用rbenv local 3.1.2
为您的项目选择 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 版本将累积在~/.rbenv/versions
目录中。
要删除旧的 Ruby 版本,只需rm -rf
您要删除的版本的目录即可。您可以使用rbenv prefix
命令查找特定 Ruby 版本的目录,例如rbenv prefix 2.7.0
。
ruby-build 插件提供了rbenv uninstall
命令来自动执行删除过程。
您需要了解的主要 rbenv 命令是:
列出 rbenv 已知的所有 Ruby 版本,并在当前活动版本旁边显示一个星号。
$ rbenv versions
1.8.7-p352
1.9.2-p290
* 1.9.3-p327 (set by /Users/sam/.rbenv/version)
jruby-1.7.1
rbx-1.2.4
ree-1.8.7-2011.03
显示当前活动的 Ruby 版本,以及有关其设置方式的信息。
$ rbenv version
1.9.3-p327 (set by /Users/sam/.rbenv/version)
通过将版本名称写入当前目录中的.ruby-version
文件来设置本地应用程序特定的 Ruby 版本。此版本覆盖全局版本,并且可以通过设置RBENV_VERSION
环境变量或使用rbenv shell
命令来覆盖自身。
rbenv local 3.1.2
当不带版本号运行时, rbenv local
会报告当前配置的本地版本。您还可以取消设置本地版本:
rbenv local --unset
通过将版本名称写入~/.rbenv/version
文件来设置要在所有 shell 中使用的 Ruby 全局版本。此版本可以通过特定于应用程序的.ruby-version
文件或通过设置RBENV_VERSION
环境变量来覆盖。
rbenv global 3.1.2
特殊版本名称system
告诉 rbenv 使用系统 Ruby(通过搜索$PATH
检测到)。
当不带版本号运行时, rbenv global
报告当前配置的全局版本。
通过在 shell 中设置RBENV_VERSION
环境变量来设置特定于 shell 的 Ruby 版本。此版本覆盖特定于应用程序的版本和全局版本。
rbenv shell jruby-1.7.1
当没有版本号运行时, rbenv shell
报告RBENV_VERSION
的当前值。您还可以取消设置 shell 版本:
rbenv shell --unset
请注意,您需要启用 rbenv 的 shell 集成(安装说明的步骤 3)才能使用此命令。如果您不想使用 shell 集成,您可以简单地自己设置RBENV_VERSION
变量:
export RBENV_VERSION=jruby-1.7.1
为 rbenv 已知的所有 Ruby 可执行文件安装垫片 ( ~/.rbenv/versions/*/bin/*
)。通常您不需要运行此命令,因为它会在安装 gems 后自动运行。
rbenv rehash
显示运行给定命令时 rbenv 将调用的可执行文件的完整路径。
$ rbenv which irb
/Users/sam/.rbenv/versions/1.9.3-p327/bin/irb
列出包含指定可执行文件名称的所有 Ruby 版本。
$ rbenv whence rackup
1.9.3-p327
jruby-1.7.1
ree-1.8.7-2011.03
您可以通过以下设置影响 rbenv 的运行方式:
姓名 | 默认 | 描述 |
---|---|---|
RBENV_VERSION | 指定要使用的 Ruby 版本。 另请参阅 rbenv shell | |
RBENV_ROOT | ~/.rbenv | 定义 Ruby 版本和垫片所在的目录。 另请参阅 rbenv root |
RBENV_DEBUG | 输出调试信息。 也可作为: rbenv --debug <subcommand> | |
RBENV_HOOK_PATH | 参见维基百科 | 搜索 rbenv 挂钩的以冒号分隔的路径列表。 |
RBENV_DIR | $PWD | 开始搜索.ruby-version 文件的目录。 |
rbenv init
是一个帮助命令,用于将 rbenv 引导到 shell 中。此帮助程序是推荐安装说明的一部分,但可选,因为高级用户可以手动设置以下任务。以下是该命令在启动期间由 shell 对其输出进行eval
时执行的操作:
如有必要,将rbenv
可执行文件添加到 PATH。
将~/.rbenv/shims
目录添加到 PATH 之前。这基本上是 rbenv 正常运行的唯一要求。
安装 rbenv 命令的 bash shell 补全。
重新生成 rbenv 垫片。如果此步骤减慢了 shell 启动速度,您可以使用--no-rehash
标志调用rbenv init -
。
安装“sh”调度程序。该位也是可选的,但允许 rbenv 和插件更改当前 shell 中的变量,从而使rbenv shell
等命令成为可能。
您可以自己运行rbenv init -
来检查生成的脚本。
rbenv 的简单性使得临时禁用它或从系统中卸载它变得很容易。
要禁用rbenv 管理 Ruby 版本,只需从 shell 启动配置中注释或删除rbenv init
行即可。这将从 PATH 中删除 rbenv shims 目录,并且将来的调用(例如ruby
将执行系统 Ruby 版本,完全绕过 rbenv。
禁用后, rbenv
仍可通过命令行访问,但您的 Ruby 应用程序不会受到版本切换的影响。
要完全卸载rbenv,请执行步骤(1),然后删除rbenv根目录。这将删除安装在`rbenv root`/versions/
下的所有 Ruby 版本:
rm -rf "$(rbenv root)"
如果您已使用包管理器安装了 rbenv,则最后一步执行 rbenv 包删除:
brew uninstall rbenv
sudo apt purge rbenv
sudo pacman -R rbenv
使用 Bats 执行测试:
$ bats test
$ bats test/<file>.bats
请随时在问题跟踪器上提交拉取请求和文件错误。