你是否刚刚在你的Mac上安装了Rails,但当你试图使用它时却发现 "Rails目前没有安装在这个系统上"?
根据你安装Rails的方式,解决这个问题可能很简单,也可能很复杂。无论你做什么,请不要按照指示简单地输入sudo gem install rails 。了解为什么你永远不应该使用sudo来安装gems。
这个错误也可能是由于你安装Ruby的方式造成的。如果你使用rbenv ,你的系统可能在安装宝石后不能立即识别它们。这不是chruby 的问题,这就是为什么它是我推荐的Ruby版本管理器。
这里有四种方法来解决 "Rails目前没有安装在这个系统上 "的错误:
退出并重新启动终端
当你对你的开发环境做出改变时,它们可能不会立即生效。这是最常见的混乱来源之一,退出并重启终端会解决很多问题。就像把它关掉再打开一样。
如果这还不行,请尝试本指南中的下一个解决方案。
再次安装Rails
另一种可能找不到 gem 的常见情况是在 Ruby 版本之间切换时。如果你用版本管理器(如 chruby、rbenv、asdf 或 rvm)安装 Ruby,你需要在每个版本的 Ruby 中分别安装 gem。
例如,如果你在使用Ruby 3.1.0时第一次安装Rails,然后你安装并切换到Ruby 2.7.5,Rails将不会自动出现。你需要在你安装的每个版本的Ruby中重新运行gem install rails 。
如果这也不行,请尝试本指南中的下一个解决方案。
用 chruby 和 ruby-install 安装 Rails(最可靠的方法)
在所有可能在Mac上安装Rails的方法中,我推荐使用Ruby管理器。这允许你同时安装多个版本的Ruby,并且可以在它们之间轻松切换。而在所有的Ruby管理器中,我推荐chruby 和ruby-install ,因为它们是最可靠和最容易使用的。
即使你认为你现在不需要一个以上的版本,也值得你花时间去学习如何使用Ruby版本管理器,因为你将不可避免地需要一个。
好消息是,我的Ruby on Mac脚本可以让你在几分钟内回到正轨。在过去的十年里,我已经帮助成千上万像你一样的人在他们的Mac上正确设置了Ruby。
Ruby on Mac不仅会建立一个正确的Ruby环境,它还会自动安装Rails,以及所有你需要的Rails的其他工具。所有这些都只需要一个命令。它将为你节省大量的时间和挫折感。
它不仅有一次性的使用。你可以一次又一次地运行它,以保持你的系统是最新的和安全的。而且,当你下次得到一个新的Mac时,它将为你节省半天时间,因为它还可以自动安装你所有的Mac应用程序,此外还有一个完整的开发环境。你现在和将来都可以用一次性的费用获得所有这些时间上的节省。
当你今天购买Ruby on Mac时,你将支持一个独立的开发者,而且考虑到它所节省的时间,你将以一个非常合理的价格获得它。
如果你想在一台工作电脑上设置Rails,你应该能够支付Ruby on Mac的一次性费用。
更新你的PATH (耗时且复杂)
为了让你的计算机知道一个命令、宝石或其他可执行程序,必须告诉它在哪里寻找它。如果让电脑在整个硬盘上搜索该程序,那是没有效率的。相反,它在一个特定的位置列表中寻找,这些位置存储在一个名为PATH 的环境变量中。你可以通过在你的终端运行这个命令来查看这个列表:
echo $PATH
当你安装新的程序时,比如Rails,它们可能会被安装在一个尚未包括在PATH 。如果你不把这个新的位置添加到PATH ,计算机就不知道要在那里寻找它,所以它认为它不存在。
使用我的Ruby on Mac脚本,你不必担心这些问题。它可以自动检测和配置一切。
关于PATH ,以及如何向其添加位置的更深入的指南,请阅读我的关于故障排除命令未找到的指南。
Rails的安装位置取决于你安装Ruby的方式。如果你用Homebrew安装Ruby(我不推荐这样做),你可能错过了将Homebrew的gems位置添加到你的PATH:
By default, binaries installed by gem will be placed into:
/usr/local/lib/ruby/gems/3.1.0/bin
You may want to add this to your PATH.
在M1 Mac上,取决于你是否在Rosetta模式下运行终端,它可能指的是/opt/homebrew 而不是/usr/local 。
但如果你不知道如何把东西添加到你的PATH ,这条信息就没有多大帮助。这里有一个方法可以把它添加到你的PATH:
echo 'export PATH="/usr/local/opt/ruby/bin:/usr/local/lib/ruby/gems/3.1.0/bin:$PATH"' >> ~/.zshrc
如果你使用bash,用.bash_profile 替换.zshrc 。如果你不确定,请阅读我的指南以了解你使用的是哪种shell。
如果你使用的是M1 Mac,并且你在安装Homebrew时没有使用Rosetta,那么就把上面命令中的/usr/local 的所有实例替换为/opt/homebrew 。
上面命令中的3.1.0 假设Homebrew安装的Ruby版本是以3.1 开始的。如果你使用的是不同的版本(你可以用ruby -v 检查),用你的Ruby版本的前两位数字替换3.1 。
一旦你更新了你的PATH ,退出并重新启动你的终端,然后在运行这个命令时验证Homebrew的gems目录是否包含在GEM PATHS 部分:
gem env
然后再次安装Rails,以确定它已被安装:
gem install rails
然后退出并重启你的终端,现在你应该可以使用rails 命令了:
rails -v
虽然这个方案可行,但我不建议继续使用由Homebrew管理的Ruby,因为你将无法在不同的Ruby版本之间轻易切换。这迟早会让你感到困惑和头痛。
相反,我建议使用像chruby 这样的版本管理器,我的Ruby on Mac脚本就是用它来设置一个合适的Ruby环境,这样你就可以在几分钟内启动并运行Rails。