macOS上使用rbenv安装Ruby on Rails:完整指南与常见问题

引言

Ruby on Rails 是一个流行的应用程序开发框架,深受寻求创建网站和网络应用的开发人员青睐。Ruby 编程语言与 Rails 开发框架相结合,能够实现快速高效的应用程序开发。

使用命令行工具 rbenv 是在 macOS 上安装 Ruby 和 Rails 的推荐方法。rbenv 能为您提供一个可控且稳定的开发环境,允许您根据项目需求轻松切换 Ruby 版本。

rbenv 支持为特定应用程序指定 Ruby 版本,允许您更改全局 Ruby 版本,并可以通过环境变量覆盖 Ruby 版本设置。

在本教程中,您将学习如何在本地 macOS 机器上使用 rbenv 安装和配置 Ruby on Rails。

先决条件

在开始本教程之前,您需要准备以下材料:

  • 一台安装了 macOS 的电脑或虚拟机,具备管理员权限并能连接互联网。本教程已在 macOS 12.4 Monterey 上测试通过。
  • 您的 macOS 机器上已安装 Node.js,具体安装方法请参考《如何在 macOS 上安装 Node.js 并创建本地开发环境》。Rails 的一些功能,例如 Asset Pipeline,依赖于 JavaScript 运行时,Node.js 提供了此功能。
  • 您的 macOS 机器上已安装 Homebrew 包管理器。

第一步 – 安装 rbenv

在此步骤中,您将安装 rbenv 并确保它在启动时自动运行。在 macOS 上,本教程将使用 Homebrew 包管理器来完成此操作。

要使用 Homebrew 下载 rbenv 包,请运行以下命令:

  1. brew install rbenv

这将安装 rbenv 和 ruby-build 插件。该插件添加了 rbenv install 命令,简化了新版本 Ruby 的安装过程。这可能需要安装一些其他依赖项,并可能需要一些时间。

然后,您将在 ~/.bash_profile 文件中添加命令 eval "$(rbenv init -)",以便在打开终端时自动加载 rbenv。为此,请在 nano 或您喜欢的文本编辑器中打开您的 .bash_profile 文件:

  1. nano .bash_profile

将以下行添加到文件中:

eval "$(rbenv init -)"

保存并退出文件。

接下来,将您对 ~/.bash_profile 文件所做的更改应用到您当前的 shell 会话中:

  1. source ~/.bash_profile

为了验证 rbenv 是否正确设置,请使用 type 命令,该命令将显示关于 rbenv 命令的更多信息:

  1. type rbenv

您的终端窗口将显示以下内容:

Output
rbenv is a function rbenv () { local command; command="${1:-}"; if [ "$#" -gt 0 ]; then shift; fi; case "$command" in rehash | shell) eval "$(rbenv "sh-$command" "$@")" ;; *) command rbenv "$command" "$@" ;; esac }

至此,您的计算机已安装 rbenv 和 ruby-build。这将允许您在下一步中通过命令行安装 Ruby。

第二步 – 安装 Ruby

现在已安装 ruby-build 插件,您可以通过一个命令安装所需的任何版本的 Ruby。在此步骤中,您将选择一个 Ruby 版本,将其安装到您的设备上,然后验证安装。

首先,使用 -l 标志列出可用的 Ruby 版本。请注意,未列出的最近次要版本也可能可用。例如,如果此命令的输出列出 Ruby 3.0.5,您很可能也能安装 3.0.4 版本。

  1. rbenv install -l
Output
2.6.10 2.7.6 3.0.4 3.1.2 jruby-9.3.6.0 mruby-3.1.0 picoruby-3.0.0 rbx-5.0 truffleruby-22.1.0 truffleruby+graalvm-22.1.0

该命令的输出将是一个很长的版本列表,您可以选择安装其中的一个。

对于本教程,我们将安装 Ruby 3.1.2 版本:

  1. rbenv install 3.1.2

安装 Ruby 可能是一个漫长的过程,请耐心等待安装完成。

一旦安装完成,使用 global 子命令将其设置为您的默认 Ruby 版本:

  1. rbenv global 3.1.2

通过检查其版本号来确认 Ruby 是否已正确安装:

  1. ruby -v

您的输出会看起来像这样:

Output
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]

要安装和使用不同版本的 Ruby,您可以使用不同的版本号运行 rbenv 命令,例如 rbenv install 2.7.6rbenv global 2.7.6

您现在已经安装了一个版本的 Ruby,并设置了默认版本。接下来,您将通过配置 Ruby 包和库(也称为 gems)来准备安装 Rails。

第三步 – 使用 Gems

Gems 是 Ruby 库和程序的打包,可以在 Ruby 生态系统中分发。您可以使用 gem 命令来管理这些 gems。在此步骤中,您将配置 gem 命令以准备进行 Rails 安装。

当您安装一个 gem 时,安装过程会生成本地文档。这可能会为每个 gem 的安装过程增加很多时间,因此您可以通过创建一个名为 ~/.gemrc 的文件来关闭本地文档生成,其中包含一个配置设置以关闭此功能:

  1. echo "gem: --no-document" > ~/.gemrc

完成这一步骤后,使用 gem 命令安装 Bundler,这是一个用于管理项目 gem 依赖的工具。Rails 需要它才能正常工作:

  1. gem install bundler

您会看到类似这样的输出结果:

Output
Fetching: bundler-2.3.18.gem Successfully installed bundler-2.3.18 1 gem installed

您可以使用 gem env 命令了解有关 gem 环境和配置的更多信息。要查看已安装 gem 的位置,可以使用 home 参数,就像这样:

  1. gem env home

您将会看到类似这样的输出:

/Users/sammy/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0

既然您已经设置并探索了 Gem 工作流,现在您可以自由安装 Rails。

第四步 – 安装 Rails

要安装 Rails,使用 gem install 命令即可。

  1. gem install rails

gem 命令会安装指定的 Gem 以及所有的依赖项。Rails 是一个复杂的 Web 开发框架,有许多依赖项,因此该过程需要一些时间才能完成。最终,您会看到一条消息,说明 Rails 已安装,并附带其依赖项。

输出
Successfully installed rails-7.0.3.1 35 gems installed

注意:如果您想安装不同版本的 Rails,可以通过搜索列出可用的 Rails 版本,这会输出一个长长的列表。然后您可以使用 -v 参数来安装特定版本,例如 4.2.7:

gem search '^rails$' --all
gem install rails -v 4.2.7

rbenv 通过创建一个拦截调用并进行更改或重定向的垫片(shims)目录或库来工作。在这种情况下,垫片会将 Ruby 命令指向当前启用的 Ruby 版本使用的文件。通过 rehash 子命令,rbenv 在该目录中维护垫片,以便匹配服务器上每个已安装的 Ruby 版本中的每个 Ruby 命令。每当您安装一个新的 Ruby 版本或提供命令的 Gem(例如 Rails)时,都应该使用 rehash

要重新生成垫片目录,请运行以下命令:

  1. rbenv rehash

通过使用以下命令打印 Rails 的版本来验证您的 Rails 安装情况:

  1. rails -v

您将看到已安装的 Rails 版本。

输出
Rails 7.0.3.1

在成功安装 Rails 后,您可以开始测试 Ruby on Rails 的安装并开始开发 Web 应用程序。在下一步中,您将学习如何更新和卸载 rbenv 以及 Ruby。

第五步 – 更新和卸载 rbenv 和 Ruby

在维护项目时,知道如何在需要时更新和卸载是非常有用的。在这一步中,您将升级 rbenv,然后从您的机器上卸载 Ruby 和 rbenv。

您可以通过运行以下命令,在 Homebrew 中升级 rbenv 和 ruby-build:

  1. brew upgrade rbenv ruby-build

如果需要更新 rbenv 或 ruby-build,Homebrew 会自动帮您完成。如果您的设置已经是最新的,您会得到类似以下的输出结果。

输出
Warning: rbenv 1.2.0 already installed Warning: ruby-build 20220713 already installed

这将确保我们使用的是最新版本的可用 rbenv。

当您下载更多的 Ruby 版本时,您可能会在您的 ~/.rbenv/versions 目录中积累比您希望的更多版本。通过使用 ruby-build 插件的 uninstall 子命令,您可以删除这些之前的版本。

例如,运行以下命令来卸载 Ruby 2.1.3 版本:

  1. rbenv uninstall 2.1.3

通过使用 rbenv uninstall 命令,您可以清理掉旧版本的 Ruby,以免安装了比当前使用的版本更多的 Ruby。

如果您已经决定不再使用 rbenv,您可以从您的系统中移除它。

要做到这一点,首先在编辑器中打开您的 ~/.bash_profile 文件。

  1. nano ~/.bash_profile

在打开终端时,找到并删除文件中的下面这行代码,以阻止 rbenv 启动:

以下是对”~/.bash_profile”的单一中文本地译法:家目录中的 .bash_profile 文件

...
eval "$(rbenv init -)"

一旦您删除了这一行,保存文件并退出编辑器。

运行以下命令以应用更改到您的 shell:

  1. source ~/.bash_profile

接下来,使用以下命令移除 rbenv 和所有已安装的 Ruby 版本。

  1. rm -rf `rbenv root`

最后,使用 Homebrew 删除 rbenv 软件包本身。

  1. brew uninstall rbenv

检查 rbenv 的版本,以确保已经卸载。

  1. rbenv -v

您将获得以下输出:

输出
-bash: /usr/local/bin/rbenv: No such file or directory

这意味着您已成功从您的机器上移除了 rbenv。

结论

总之,在本教程中,您使用 rbenv 在 macOS 上安装了 Ruby on Rails。从这里开始,您可以通过我们的《如何用 Ruby 编码系列》学习更多关于 Ruby 编码的知识。您还可以探索如何使用 PostgreSQL 而不是默认的 sqlite3 数据库来使用 Ruby on Rails,这将为您的应用程序提供更高的可扩展性、集中性和稳定性。

bannerAds