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 包,请运行以下命令:
- brew install rbenv
这将安装 rbenv 和 ruby-build 插件。该插件添加了 rbenv install
命令,简化了新版本 Ruby 的安装过程。这可能需要安装一些其他依赖项,并可能需要一些时间。
然后,您将在 ~/.bash_profile
文件中添加命令 eval "$(rbenv init -)"
,以便在打开终端时自动加载 rbenv。为此,请在 nano 或您喜欢的文本编辑器中打开您的 .bash_profile
文件:
- nano .bash_profile
将以下行添加到文件中:
eval "$(rbenv init -)"
保存并退出文件。
接下来,将您对 ~/.bash_profile
文件所做的更改应用到您当前的 shell 会话中:
- source ~/.bash_profile
为了验证 rbenv 是否正确设置,请使用 type
命令,该命令将显示关于 rbenv
命令的更多信息:
- type rbenv
您的终端窗口将显示以下内容:
Outputrbenv 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 版本。
- rbenv install -l
Output2.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 版本:
- rbenv install 3.1.2
安装 Ruby 可能是一个漫长的过程,请耐心等待安装完成。
一旦安装完成,使用 global
子命令将其设置为您的默认 Ruby 版本:
- rbenv global 3.1.2
通过检查其版本号来确认 Ruby 是否已正确安装:
- ruby -v
您的输出会看起来像这样:
Outputruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-darwin21]
要安装和使用不同版本的 Ruby,您可以使用不同的版本号运行 rbenv 命令,例如 rbenv install 2.7.6
和 rbenv global 2.7.6
。
您现在已经安装了一个版本的 Ruby,并设置了默认版本。接下来,您将通过配置 Ruby 包和库(也称为 gems)来准备安装 Rails。
第三步 – 使用 Gems
Gems 是 Ruby 库和程序的打包,可以在 Ruby 生态系统中分发。您可以使用 gem
命令来管理这些 gems。在此步骤中,您将配置 gem
命令以准备进行 Rails 安装。
当您安装一个 gem 时,安装过程会生成本地文档。这可能会为每个 gem 的安装过程增加很多时间,因此您可以通过创建一个名为 ~/.gemrc
的文件来关闭本地文档生成,其中包含一个配置设置以关闭此功能:
- echo "gem: --no-document" > ~/.gemrc
完成这一步骤后,使用 gem
命令安装 Bundler,这是一个用于管理项目 gem 依赖的工具。Rails 需要它才能正常工作:
- gem install bundler
您会看到类似这样的输出结果:
OutputFetching: bundler-2.3.18.gem
Successfully installed bundler-2.3.18
1 gem installed
您可以使用 gem env
命令了解有关 gem 环境和配置的更多信息。要查看已安装 gem 的位置,可以使用 home
参数,就像这样:
- gem env home
您将会看到类似这样的输出:
/Users/sammy/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0
既然您已经设置并探索了 Gem 工作流,现在您可以自由安装 Rails。
第四步 – 安装 Rails
要安装 Rails,使用 gem install
命令即可。
- 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
。
要重新生成垫片目录,请运行以下命令:
- rbenv rehash
通过使用以下命令打印 Rails 的版本来验证您的 Rails 安装情况:
- rails -v
您将看到已安装的 Rails 版本。
输出Rails 7.0.3.1
在成功安装 Rails 后,您可以开始测试 Ruby on Rails 的安装并开始开发 Web 应用程序。在下一步中,您将学习如何更新和卸载 rbenv 以及 Ruby。
第五步 – 更新和卸载 rbenv 和 Ruby
在维护项目时,知道如何在需要时更新和卸载是非常有用的。在这一步中,您将升级 rbenv,然后从您的机器上卸载 Ruby 和 rbenv。
您可以通过运行以下命令,在 Homebrew 中升级 rbenv 和 ruby-build:
- 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 版本:
- rbenv uninstall 2.1.3
通过使用 rbenv uninstall
命令,您可以清理掉旧版本的 Ruby,以免安装了比当前使用的版本更多的 Ruby。
如果您已经决定不再使用 rbenv,您可以从您的系统中移除它。
要做到这一点,首先在编辑器中打开您的 ~/.bash_profile
文件。
- nano ~/.bash_profile
在打开终端时,找到并删除文件中的下面这行代码,以阻止 rbenv 启动:
以下是对”~/.bash_profile”的单一中文本地译法:家目录中的 .bash_profile 文件
...
eval "$(rbenv init -)"
一旦您删除了这一行,保存文件并退出编辑器。
运行以下命令以应用更改到您的 shell:
- source ~/.bash_profile
接下来,使用以下命令移除 rbenv 和所有已安装的 Ruby 版本。
- rm -rf `rbenv root`
最后,使用 Homebrew 删除 rbenv 软件包本身。
- brew uninstall rbenv
检查 rbenv 的版本,以确保已经卸载。
- 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,这将为您的应用程序提供更高的可扩展性、集中性和稳定性。