如何在macOS 10.14.6系统上使用“Ruby社区首选”方法(一些安装/版本管理器或类似工具)删除(所有旧的Ruby内容),重新安装(最好是一个且只有一个Ruby版本),并测试我的整个Ruby环境(版本管理器,gems,但这是可行的)?
我正在寻找整个过程,一切Ruby环境相关:Ruby“引擎”、版本管理器、.bash_profile
编辑等。
尽管我们(我的团队)不是Ruby开发人员,但我们运行了一些基于Ruby的应用程序,比如Asciidoctor。因此,我们只是用户,除了尝试让应用程序(比如Asciidoctor)运行起来没有问题之外,我们没有投资学习Ruby的所有细节,仅此而已。
1.删除。
我想彻底删除系统上的每个小Ruby文件(除了macOS自带的基于Apple.com的默认Ruby的东西--我不想删除甚至使用那些东西,如果我能避免的话)。和任何其他Ruby的东西/version_manager/intstalled_directory(似乎有很多不同的过程,没有一个“标准安装过程--这对我们来说都很混乱)。
因此,请考虑可能在整个历史或Ruby中安装的所有历史Ruby-isms,因为很可能我从Ruby的早期就开始安装它们,并且我/我们仍然拥有我们一直在向前推进的相同macOS映像(在升级的MacBook硬件上)。
而且似乎最有意义的是确保这些东西都消失了(或者至少移出了功能路径),以确保我们有一个干净的石板来...
2.重新安装。
我们到底要安装什么?为什么要安装?我们还不清楚。为什么我们只想要一个版本,却需要一些东西来管理Ruby的版本?我们需要多个版本的Ruby有什么原因吗?我们必须把Ruby的“东西”和Ruby的“版本管理器”分开吗?有没有“为非Ruby开发人员安装Ruby”的资源来帮助我们完成这个过程?
(我不太熟悉“版本管理器”这个术语来描述解释器/编译器软件的实际 * 版本 *。作为一名长期的swdev管理员,我习惯于管理我的团队 * 正在开发的软件的版本。我们猜测这可能是由Ruby世界可能不会尝试强制执行尽可能多的跨Ruby版本兼容性驱动的,但我们只是猜测。当然,我们倾向于用C/C++/Python之类的东西做更多的系统编程,也许后者更少“我是一个开发人员,我不写跨版本平台的可移植代码/我是一个编程语言/平台设计师,不太关心跨版本兼容性”。这对我们来说是一个新的世界)。
3.测试。
当完成#2后,我想通过一个全面的系统测试来自动诊断我的整个Ruby环境,这可行吗?
如果我不这样做,历史告诉我,我会遇到一个Ruby不稳定的环境问题。如果可能的话,我想得到“设置和忘记它”的一切,在一个镜头,避免遇到未来的问题。
想想历史上的东西,比如make test
(在make
和make install
之后)和brew doctor
。
更多详情
我的macOS 10.14.6上的Ruby环境/子系统是不稳定的,破碎的和令人沮丧的。所说的环境是多年(几十年)Ruby的东西/层堆积到我的macOS环境中的结果(随着时间的推移,它被克隆到MacBook上,因此被继承)。
我试着重建它,清理它,试图得到一定程度的理智。它主要是(?)似乎可以工作,至少在运行时可以。但是rvm
相关的东西仍然失败--我甚至需要rvm
吗(不清楚我喜欢Ruby中为非Ruby开发人员设置的许多东西)。而且我在.bashrc
中仍然有很多看起来不健康的ruby-isms(为什么这么多$PATH
条目..?),或者至少让我不舒服。
我在www.example.com和其他地方找到了至少20个不同的“重新安装/重建”参考资料StackExchange.com,其中许多提供了不同的基于Homebrew的过程。
My gem env
output。注意所有这些 * 不同 * 的版本都与一些类似ruby的组件相关联:3.1.2, 2.7.0, 2.7.1, 2.2.1, 2.2.0, 1.1.2
有六个不同的子系统版本。在我看来,这很糟糕。
(我不是Ruby开发人员,所以请原谅我可怜的Ruby“语法”。
显然,Ruby社区的成员都在关注在一个操作系统上安装多个版本的Ruby的概念;从一个传统的、老派的系统管理员的Angular 来看(也就是我),多个安装的Ruby版本是我的团队特别想避免的事情。也许有一些需要在一个系统上安装多个Ruby版本。也许这是因为Ruby提供了比我们习惯的其他软件系统更不稳定的环境(功能、API等)。无论如何:如果不知道更多,我宁愿使用容器(如Docker)来管理Ruby的多个版本。
从这个用户的Angular 来看:Ruby的世界感觉很混乱,而且不必要的复杂。随着Ruby的流行,我相信这是有原因的。我的猜测是:Ruby的价值观是在平台稳定性之上的特性进步。戴上我的swdev帽子可能会很有趣。对于这个使命,我只戴上我的系统管理员帽子。
4条答案
按热度按时间gpfsuwkq1#
当我在Linux操作系统上工作时,我通常使用RVM。然而,有一段时间我在macOS上工作。我多次尝试在macOS上安装RVM,但从未成功,所以我尝试了rbenv。它与RVM有区别,但它为我做了这项工作。
这可能不是你想要的答案,但如果是的话,下面是安装rbenv的步骤:
1.在终端中键入
brew install rbenv
以安装rbenv。1.在
~/.bash_profile
中添加eval "$(rbenv init -)"
命令,使rbenv在打开终端时自动加载。1.在终端中键入
source ~/.bash_profile
以将您所做的更改应用到当前shell会话。1.在终端中键入
type rbenv
以验证rbenv是否正确设置。您的终端应显示以下内容:现在,安装Ruby版本:
rbenv install -l
。rbenv install 5.5.0
。rbenv versions
。rbenv global 5.5.0
。rbenv local 5.5.0
。rbenv version
。ruby -v
以确保设置正确完成。4ngedf3f2#
使用完整的Ruby版本管理器
你试图用自制软件安装一个或多个宝石,然后希望你的宝石环境保持正常。不要。不要。
通过Homebrew安装Ruby可能会出现奇怪的冲突和难以解决的错误消息。你最好安装一个Ruby版本管理器,比如chruby,rbenv或RVM。这不仅通常会工作得更好,而且它会在每个解释器的基础上隔离你的gem,这样当你不可避免地遇到gem,库或Xcode升级问题时,你可以轻松清理你的Ruby环境。
你需要安装Xcode和它的命令行工具。除此之外,我建议chruby和ruby-install作为最简单的集成解决方案,但是如果你正确设置的话,任何Ruby管理器都可以。
fzwojiic3#
(请务必查看本答案末尾的背景部分。)
我的流程
1.删除 * 所有 * 现有Ruby内容(苹果为macOS“核心系统”安装的Ruby“系统”文件除外)。
这是我不太确定的过程的一部分。我已经在www.example.com上询问superuser.com关于"how to remove all possible, old Ruby cruft"的问题,并将在那里学到的任何东西导入到这个过程中。同时,我发现了一些与Ruby相关的东西(例如:
~/.ruby-version
),我找不到任何文档/参考资料。这是一次迷你冒险。但以下是我的想法:a)自制啤酒:
brew uninstall ruby ruby-build rbenv
和任何其他面向Ruby的Homebrew包。brew list | grep
可以帮助找到这些包。B)rvm uninstall--但请先阅读下面的“旧文件丢弃”注解,以便保留您的旧rvm环境以供参考。
c)您可以找到或想到的任何其他卸载(当然是非Apple-macOS系统安装),可能包括从https://rvm.io和https://github.com/rbenv/rbenv以及您可以找到/想到的任何其他version managers中找到的过程导致的安装。
2.从
$HOME
中删除或移动旧的Ruby文件dropping我移动了文件,而不是删除它们,按照下面的过程。请注意,
~/.rvm
移动有效地完成了上述(1b)过程的部分或全部,同时保留了旧的~/.rvm
环境(可能非常有用)参考,例如:重新构建你的installed-gems列表。还要注意你的主目录中可能有或多或少的“文件丢弃”。3.(重新)为this one-line command安装最新的“稳定”(?)rbenv/“ruby engine”(假定为Homebrew is already installed),给定
rbenv
version manager选择,如下面的 * 背景 * 部分所述:上面并没有通过Homebrew安装“Ruby引擎”;相反,它安装
rbenv
(通过homebrew),然后按照以下方式安装“Ruby引擎”:4.评论/删除过去Ruby-isms中的
~/.bash_profile
更新最后,我注解掉了过去Ruby驱动的更新中的所有这些行,这些行似乎没有被
rbenv
使用和/或与rbenv
冲突(您的文件可能没有这样的内容):5.添加到
~/.bash_profile
:6.启动新的macOSTerminal.app窗口(或iTerm 2或类似窗口)。
7. [可选]在新环境中重新安装以前的gem。
我看了一下我以前的
.rvm
bin列表:(可能还有其他地方可以寻找现有的gem,因为Ruby的东西可以分散在许多Ruby社区称之为“Ruby”的地方),并对我想在新的(干净、新鲜和健全的)Ruby环境中重用的每个包运行
gem install [gem-package]
。我对我的团队相当复杂的asciidoctor文档库运行了一些初始的asciidoctor
测试,起初一切似乎都很好。我们更希望有某种重要的Ruby引擎“自我诊断”(一个简单的例子:
brew doctor
)给予用户更多的信心,他们的“Ruby引擎”是最佳功能的。唉,我到目前为止还没有看到Ruby有这样的东西。从这里向前发展,我可以获得更多的信心,通过
rbenv
构建多个“Ruby”,只有rbenv
。之前,我有多个Ruby通过多个安装程序/版本管理器(Homebrew,rvm和rbenv)管理,这可能是许多问题的原因,可能是每个Todd's point。背景
Ruby has a bit of complexity和可能运行得更好的version manager.我觉得这一切有点不寻常,至少从我几十年的swdev+sysadmin经验.我当然可以看到所有这些机制可以是非常强大的.现在,我只是想让我的Ruby平台 * 工作 *.
据我所知,在macOS上安装和运行Ruby并没有“一种标准的方式”,也没有一个标准的目录可以放置Ruby,这意味着没有“一种标准的方式”可以 * 卸载 *,所以如果用户已经安装了Ruby,就必须这样做(经常 * 不知不觉 *像我一样)安装了许多不同的Ruby版本(我猜叫“Ruby”?)这些年来(数十年?)在由多个不同“版本管理器”控制的许多不同文件/目录中(我想?稍后会有更多关于版本管理器的内容)。ie,我发现我必须“狩猎和啄食”过去Ruby安装/version_managers可能会将文件/目录放置在各个区域的所有历史方式。
注意,当你有一个已经存在了很多年的macOS镜像时,就会发生这种情况,在我的例子中,它已经在很多代MacBook上被克隆了。对于一个去Ruby Boot 营一周并在干净的系统上安装的人来说,对于像我这样做了几十年的工程师/经理的人来说,可能有各种各样的Ruby主义为他几十年的macOS形象奠定了基础(正如许多不同的基于Ruby的应用程序/指南所指导的那样,我如何安装东西;不知道这些程序中的许多实际上是相互冲突的),这可能是完全不同的故事。
Ruby平台显然需要一个名为Version Manager的东西来运行Ruby平台(解释器、编译器、引擎,不管它叫什么)。在删除/移动了所有旧的东西之后,我选择了
rbenv
(based upon this reference)版本管理器作为我的过程的“安装”部分。如果还不明显,最好避免同时安装和运行多个版本管理器。
安装选项
似乎有几种方法可以在macOS上安装Ruby“核心引擎/平台”(我的语法,可能只有我使用),下面是我发现的3个最常引用的选项。(注意,下面没有列出many other version managers。)我选择了
rbenv
based upon this reference。1.通过
rbenv
1.通过
rvm
1.通过Homebrew
(1.)和(2.)是可以安装Ruby的机制,这些机制可以通过Homebrew安装。但是#1和#2不会通过Homebrew安装 Ruby。这可能会令人困惑。
看起来(1.)和(2.)还允许Ruby的多个版本并发运行。(3.)可能不行。这可能是有用的,因为Ruby的激进的(?)特性移动带来了版本到gem/应用程序的兼容性挑战,这有时是以向后兼容性为代价的。(我猜是这样,但没有其他好的解释;Community,pls comment.)
“删除所有旧的Ruby引擎和文件”的方法可能是极端的。Ruby的历史是一团乱麻,在过去的几年/几十年里,它留下了各种各样混乱的变化手工重建gems对我来说不是什么大问题--我的系统上没有那么多gems。如果我需要恢复或重建东西的话,(希望)覆盖。而且,现在,事情感觉更“干净和理智”,现在“感觉”就像我已经删除了所有旧的杂物。
更多背景
我和我的团队只是基于Ruby的应用程序的用户,而不是Ruby开发人员,我们只是想安装、使用和维护像Asciidoctor这样的应用程序,而不必“深入”研究所有这些Ruby的东西。几年来一切都很好-然后所有的“cruft”都建立起来并开始破坏东西。当我把它全部拆下来并正确地重新安装(见上图)--一旦我终于弄清楚了所有Ruby的输入和输出是如何工作的--一切又开始正常工作了。我相信,作为一个简单的Ruby应用程序用户,我不应该为了让一个Ruby应用程序工作而付出如此大的努力。简而言之:不应该有这么难。因此我对困难的评论的性质。
此外,我有一个糟糕的一天,当我第一次张贴这个问题,不必要地激怒了几个社区成员在这里,试图帮助-再次,我的道歉,这完全是我的错-我已经被一些标签为“喜欢抱怨很多”的家伙。我完全应该在我的一些评论不恰当的标签。再次,我道歉。
此外:我的Ruby问题仍然存在,不管这里的人们是否想否认它,或者只是把问题归咎于我的吝啬。无论如何:我对那些想帮忙的人并不失望;我对Ruby平台不能很好地支持我的整体体验感到失望。
请注意TamerB's helpful answer。
tpxzln5u4#
安装在使用Homebrew包管理器的系统上,建议使用“使用包管理器”方法。在其他系统上,“基本Git Checkout”可能是确保始终安装最新版本rbenv的最简单方法。
使用包管理器使用以下方法之一安装rbenv。
在macOS或Linux上,我们建议使用Homebrew安装rbenv。
Debian、Ubuntu及其衍生版本注意,Debian和Ubuntu仓库中打包和维护的rbenv版本已经过时,建议使用git安装最新版本的rbenv。
Arch Linux及其衍生产品Arch Linux有一个用于rbenv的AUR包,您可以使用此wiki页面中的说明从AUR安装它。
学习如何在shell中加载rbenv。
运行此命令并按照打印的说明操作:
关闭终端窗口并打开一个新窗口,以便您的更改生效。
就是这样!现在可以安装一些Ruby版本了。
基本的Git checkout 注意要实现更自动化的安装,您可以使用rbenv-installer。如果您不想执行从Web URL下载的脚本,或者只是喜欢手动方法,请按照以下步骤操作。
重新启动shell,使这些更改生效(通常打开一个新的终端选项卡即可)。
安装Ruby版本
rbenv install命令不是rbenv自带的,而是由ruby-build插件提供的。
在尝试安装Ruby之前,请检查您的构建环境是否具有必要的工具和库。然后:
列出最新稳定版本:
列出所有本地版本:
安装Ruby版本:
要对BUILD FAILED场景进行故障排除,请查看ruby-build Discussions部分。
注意如果rbenv install命令没有找到,你可以将ruby-build作为一个插件安装:
git clone https://github.com/rbenv/ruby-build.git“$(rbenv root)"/plugins/ruby-build设置Ruby版本以完成安装并开始使用Ruby:
或:
作为rbenv install命令的替代,你可以下载Ruby并手动编译到~/.rbenv/versions的子目录中。该目录中的条目也可以是安装在文件系统其他位置的Ruby版本的符号链接。
安装Ruby gems为您的项目选择一个Ruby版本,例如使用rbenv local 3.1.2。然后,继续像往常一样安装gems:
警告你不应该使用sudo来安装gems。通常,Ruby版本会安装在你的主目录下,因此可以由你的用户写。如果你在安装gems时遇到“你没有写权限”错误,很可能你的“系统”Ruby版本仍然是全局默认版本。用rbenv global更改它,然后重试。
使用gem env检查gem的安装位置:
要删除旧的Ruby版本,只需rm -rf你想删除的版本的目录。你可以用rbenv prefix命令找到特定Ruby版本的目录,例如rbenv prefix 2.7.0。
ruby-build插件提供rbenv uninstall命令来自动执行删除过程。
命令参考您需要了解的主要rbenv命令有:
列出rbenv已知的所有Ruby版本,并在当前活动版本旁边显示一个星号。
显示当前活动的Ruby版本,沿着有关如何设置该版本的信息。
通过将版本名写入当前目录中的.ruby-version文件来设置本地应用程序特定的Ruby版本。此版本将覆盖全局版本,并且可以通过设置RBENV_VERSION环境变量或使用rbenv shell命令来覆盖其本身。
在没有版本号的情况下运行时,rbenv local会报告当前配置的本地版本。您也可以取消设置本地版本:
通过将版本名写入~/.rbenv/version文件来设置要在所有shell中使用的Ruby的全局版本。此版本可以由特定于应用程序的.ruby-version文件覆盖,或者通过设置RBENV_VERSION环境变量。
特殊的版本名system告诉rbenv使用系统Ruby(通过搜索$PATH检测到)。
在没有版本号的情况下运行时,rbenv global报告当前配置的全局版本。
通过在shell中设置RBENV_VERSION环境变量来设置特定于shell的Ruby版本。此版本将覆盖特定于应用程序的版本和全局版本。
在没有版本号的情况下运行时,rbenv shell会报告RBENV_VERSION的当前值。您也可以取消设置shell版本:
请注意,您需要启用rbenv的shell集成(安装说明的第3步)才能使用此命令。如果您不喜欢使用shell集成,您可以自己设置RBENV_VERSION变量:
为rbenv(~/.rbenv/versions//bin/)已知的所有Ruby可执行文件安装shim。通常您不需要运行此命令,因为它会在安装gem后自动运行。
显示运行给定命令时rbenv将调用的可执行文件的完整路径。
列出包含指定可执行文件名称的所有Ruby版本。
将~/.rbenv/shims目录预先添加到PATH中。这基本上是rbenv正常运行的唯一要求。
为rbenv命令安装shell补全。
重新生成rbenv shims。如果这个步骤减慢了shell的启动速度,你可以使用--no-rehash标志调用rbenv init -。
安装“sh”调度器。这一点也是可选的,但允许rbenv和插件更改当前shell中的变量,从而使类似rbenv shell的命令成为可能。
您可以运行rbenv init - for yourself来检查生成的脚本。
卸载rbenv rbenv的简单性使得暂时禁用它或从系统中卸载它变得很容易。
要禁用rbenv管理Ruby版本,只需注解或从shell启动配置中删除rbenv init行,这将从PATH中删除rbenv shims目录,以后的调用(如ruby)将执行系统Ruby版本,完全绕过rbenv。
禁用rbenv后,仍然可以在命令行上访问rbenv,但您的Ruby应用程序不会受到版本切换的影响。
要完全卸载rbenv,请执行步骤(1),然后删除rbenv根目录。这将删除安装在
rbenv root
/versions/下的所有Ruby版本:如果你已经使用包管理器安装了rbenv,最后一步是执行rbenv包删除:
Debian、Ubuntu及其衍生产品:sudo apt purge rbenv Archlinux及其衍生产品:sudo pacman -R rbenv