如何删除所有旧 Ruby 版本(和版本管理器)并在 macOS 10.14.6 上重新安装一个经过测试的版本?

How to remove all old Ruby versions (and version managers) and reinstall a single, tested version on macOS 10.14.6?

如何删除(所有旧的 Ruby 东西)、重新安装(最好是一个且只有一个 Ruby 版本)以及测试我的整个 Ruby 环境(versionmgrs、gems、然而这有效)在我的 macOS 10.14.6 系统上使用 "Ruby-community preferred" 方法(一些 install/version 经理或类似车辆)?

我正在寻找整个过程,所有 Ruby-环境相关的东西:Ruby "engine," 版本管理器,.bash_profile 编辑等

尽管我们(我的团队)不是 Ruby 开发人员,但我们正在 运行 开发几个基于 Ruby 的应用程序,例如 Asciidoctor。因此,我们只是用户,并没有投资于学习 Ruby 的所有来龙去脉,而只是试图让应用程序(如 Asciidoctor)毫无问题地进入 运行,仅此而已.

1.移除.

我想完全删除系统上发现的每个 Ruby 小文件(除了 macOS 附带的基于 Apple.com 的默认 Ruby 文件之外 --如果可以避免的话,我永远不会删除甚至使用那些东西)。基于 Hombrew、rbenvrvm 和任何其他 Ruby thing/version_manager/intstalled_directory(似乎有很多不同的程序,但没有一个“标准安装程序——这是都让我们感到困惑)。

所以请考虑所有可能已经安装了整个历史或 Ruby 的历史 Ruby-ism,因为很可能我从 Ruby 的早期就开始安装它们了=119=] 和 I/we 仍然具有我们一直在使用的相同 macOS 图像(在升级的 MacBook 硬件上)。

确保这些东西全部消失(或至少移出功能路径)似乎最有意义,以确保我们有一个干净的石板来...

2。重新安装.

我们正在安装什么以及为什么我们正在安装它还不清楚。当我们只需要 一个 时,为什么我们需要一些东西来管理 Ruby 的版本?为什么我们需要 Ruby 的多个版本?我们是否必须将 Ruby "things" 与 Ruby "version manager" 分开?是否有 "Install Ruby for non-Ruby-developer dummies" 资源来帮助指导我们解决这个问题?

(我不熟悉术语 "version manager" 来描述 interpreter/compiler 软件 的实际 版本。我习惯了,作为长期担任 swdev 经理,管理 我的团队 正在开发的软件版本。我们猜测这可能是由于 Ruby 世界可能不会尝试强制执行尽可能多的交叉-Ruby-版本兼容性,但我们只是推测。当然,我们倾向于在 C/C++/Python 中做更多的系统编程,而不是像 JavaScript/Ruby的东西。也许后者少了"I'm a developer and I do not write portable code across version platforms / I'm a programming-language/platform designer that cares less about cross-version compatibility."这对我们来说是一个新的世界。)


3。测试.

完成 #2 后,我想通过全面的系统测试自动诊断我的整个 Ruby 环境。这可行吗?

如果我不这样做,历史告诉我稍后我会 运行 陷入 Ruby-wonky-environment 问题。如果可能的话,我想一次性获得所有东西的 "set and forget it,",避免 运行 陷入未来的问题。

想想像 make test(在 makemake install 之后)和 brew doctor.

这样的历史事件


更多详情

我的 Ruby environment/subsystem 在我的 macOS 10.14.6 上不稳定、损坏且令人沮丧。所述环境是 Ruby stuff/layers 多年(数十年)堆积到我的 macOS 环境中的结果(随着时间的推移,它在 MacBook 上被克隆,因此得以延续)。

我试图重建它并清理它以尝试获得某种程度的理智。它主要(?)似乎有效,至少对于 运行ning。但是 rvm 相关的东西仍然失败——我什至需要 rvm(还不清楚,就像 Ruby 设置中针对非 Ruby 开发人员的许多东西一样)。而且我仍然有很多 ruby-ism 在 .bashrc 中徘徊,看起来不健康(为什么有这么多 $PATH 条目..?),或者至少让我不舒服。

我在 StackExchange.com 和其他地方找到了至少 20 个不同的 "reinstall / rebuild" 参考资料,其中许多提供了不同的基于 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 "syntax.")

显然 Ruby 社区成员关注在一个 OS 上安装 Ruby 多个版本的概念;从经典的、老派的系统管理员的角度来看(就是我),我的团队特别希望避免安装多个 Ruby 版本。也许需要在一个系统上安装多个 Ruby 版本。可能是因为 Ruby 提供的环境(功能、API 等)比我们习惯的其他软件系统不稳定。无论如何:在不知道更多的情况下,我更愿意使用容器管理 Ruby 的多个版本(比如 Docker)。

从该用户的角度来看:Ruby 世界让人感到混乱和不必要的复杂。 Ruby 的受欢迎程度,我敢肯定这是有原因的。我的猜测:Ruby 值比平台稳定性更重要。当我戴着系统管理员的帽子时,这不是最棒的事情;戴上我的 swdev 帽子会很有趣。对于这个任务,我只是戴着系统管理员的帽子。

使用成熟的Ruby版本管理器

您正在尝试使用 Homebrew 安装一个或多个 Rubies,然后希望您的 gem 环境保持正常。不。只是不要。

通过 Homebrew 安装 Rubies 可能会出现奇怪的冲突和难以解决的错误消息。安装 Ruby 版本管理器(如 chruby、rbenv 或 RVM)会更好。这不仅通常会更好地工作,而且它会在每个解释器的基础上隔离你的 gem,这样当你不可避免地 运行 遇到问题时,你可以轻松地清理你的 Ruby 环境gems、库或 Xcode 升级。

您需要安装 Xcode 及其命令行实用程序。除此之外,我建议将 chruby 和 ruby-install 作为最简单的集成解决方案,但如果设置正确,任何 Ruby 管理器都可以。

我在 Linux 操作系统上工作时通常使用 RVM。但是,有一段时间我在 macOS 上工作。我多次尝试在 macOS 上安装 RVM 但从未成功,所以我尝试了 rbenv。它与 RVM 有所不同,但它为我完成了工作。

这可能不是您要找的答案,但如果是,请按照以下步骤安装 rbenv:

  1. 在终端中输入 brew install rbenv 以安装 rbenv。
  2. 将命令 eval "$(rbenv init -)" 添加到 ~/.bash_profile 以使 rbenv 在您打开终端时自动加载。
  3. 在终端中键入 source ~/.bash_profile 以应用您对当前 shell 会话所做的更改。
  4. 在终端中键入 type rbenv 以验证 rbenv 是否已正确设置。您的终端应显示以下内容:

    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
    }
    

现在,要安装 Ruby 个版本:

  • 要检查可用于安装的 Ruby 版本,请在终端中键入 rbenv install -l
  • 要安装 Ruby 5.5.0,请在终端中输入 rbenv install 5.5.0
  • 要检查已安装的 Ruby 版本,请键入 rbenv versions
  • 要使 Ruby 5.5.0 成为您系统上的全球 Ruby 版本,请在终端中键入 rbenv global 5.5.0
  • 要使 Ruby 5.5.0 成为您当前目录中的 Ruby 版本,请在终端中键入 rbenv local 5.5.0
  • 要检查您当前的 rbenv Ruby 版本,请键入 rbenv version
  • 当然,输入 ruby -v 以确保设置正确。

(请务必查看此答案末尾的 背景 部分。)

我的程序

1.删除 所有 现有的 Ruby 内容(Apple 为 "core system" for macOS 安装的 Ruby "system" 文件除外)。

这是我不太确定的程序部分。我已经在 superuser.com 上询问了关于 "how to remove all possible, old Ruby cruft" 的问题,并将在那里学到的任何东西导入到这个过程中。与此同时,我发现了一些我无法轻易找到 documentation/reference 的与 Ruby 相关的东西(例如:~/.ruby-version)。这是一次迷你冒险。但这是我想出的:

a) 基于 Homebrew 的东西:brew uninstall ruby ruby-build rbenv 和任何其他面向 Ruby 的 Homebrew 包。 brew list | grep 可以帮助找到包。

b) rvm uninstall -- 但请先阅读下面的 "old file droppings" 注释,以保留您的旧 rvm 环境以供参考。

c) 您可以找到或想到的任何其他卸载(当然是非 Apple-macOS 系统安装),可能包括在 https://rvm.io and https://github.com/rbenv/rbenv and any other version managers 中找到的过程导致的安装,您可以 find/think的

2。从 $HOME

中删除或移动旧的 Ruby 文件

我按照以下过程移动了文件而不是删除它们。请注意,~/.rvm 移动有效地执行了上面的部分或全部 (1b) 过程,同时保留旧的 ~/.rvm 环境以供(可能非常有用)参考,例如:重建您的安装宝石列表.另请注意,您的主目录中可能有或多或少的 "file droppings"。

 cd $HOME
 mkdir -p .ruby-old-files/2020-04-13
 mv .rbenv/ .rvm/ .gem/ .ruby-version .ruby-old-files/2020-04-13/

3。 (重新)安装最新的 "stable" (?) rbenv/"ruby engine" 每个 (this presumes Homebrew is already installed), given the rbenv version manager 选择如下 Background 部分所述:

brew update
brew install rbenv

以上 不是 通过 Homebrew 安装 "Ruby engine";相反,它会安装 rbenv(通过自制软件),后者又会根据以下内容安装 "Ruby engine":

rbenv install $(rbenv install -l | grep -v - | tail -1)
rbenv global $(rbenv install -l | grep -v - | tail -1)

4. Comment/delete 之前 ~/.bash_profile 更新来自过去 Ruby-主义

我最终注释掉了过去 Ruby 驱动的更新中的所有这些行,这些行似乎未被 and/or 与 rbenv 冲突(您的文件可能没有类似这个):

#export PATH=$PATH:~/.gem/ruby/1.8/bin:/usr/local/opt/ruby/bin
#export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
#[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
# export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"

5.将此添加到 ~/.bash_profile:

eval "$(rbenv init -)"

6.启动一个新的 macOS Terminal.app window(或 iTerm2 或类似的)。

7. [可选] 在新环境中重新安装以前的 gem。

我查看了我之前的 .rvm bin 列表:

$ brew install tree
Warning: tree 1.8.0 is already installed and up-to-date
To reinstall 1.8.0, run `brew reinstall tree`
$ cd
$ tree -a .ruby-old-files/2020-04-13/.rvm/gems/ruby-2.2.1/bin/ -C | less
.ruby-old-files/2020-04-13/.rvm/gems/ruby-2.2.1/bin/
├── 3llo
├── _guard-core
├── asciidoctor
├── asciidoctor-safe
├── bundle
├── bundler
├── coderay
├── console
├── executable-hooks-uninstaller
├── github-markup
├── guard
├── imap-backup
├── listen
├── nokogiri
├── pry
├── rake
├── rdoc
├── ri
├── ruby_executable_hooks
├── setup
└── thor

0 directories, 21 files
$

(可能还有其他地方可以寻找现有的宝石,因为 Ruby 的东西可以散布在许多 "rubies" 的地方,正如 Ruby 社区所称)和运行 gem install [gem-package] 我想在我的新(干净、清新、健全)Ruby 环境中重复使用的每个包。我 运行 对我的团队相当复杂的 asciidoctor 文档库进行了一些初始 asciidoctor 测试,一切看起来都很好。

我们更希望有某种重要的 Ruby-引擎集 "self diagnostics"(一个更简单的例子:brew doctor)让用户更有信心他们的 "Ruby engine" 是最佳功能。 las,到目前为止,我还没有看到 Ruby.

这样的东西

从这里开始,我可以更有信心通过 rbenv 构建多个 "rubies",并且只构建 rbenv。在我通过多个 installers/version 管理器(Homebrew、rvm 和 rbenv)管理多个红宝石之前,这可能是许多问题的原因,可能是 .

背景

Ruby has a bit of complexity and possibly runs much better with a version manager。我发现这有点不寻常,至少从我几十年的 swdev+sysadmin 经验来看是这样。我当然可以看到所有这些机制如何非常强大。现在,我只是想让我的 Ruby 平台 工作 .

据我所知,macOS 上没有 "one standard way" 可安装,运行 和标准目录可放置 Ruby。这意味着没有 "one standard way" 到 卸载 ,所以必须这样做,如果他们(通常 非常不知不觉地 ,像我一样)多年来(几十年?)安装了许多不同的 Ruby 版本(我猜叫 "Rubies"?)在许多不同的 files/directories 中由多个不同的 "version managers" 控制(我猜?更多关于稍后会介绍版本管理器)。即,我发现我必须 "hunt and peck" 对于过去 Ruby 安装的所有历史方式/version_managers 可能已将 file/directories 放置在各个区域。

请注意,当您拥有已存在多年的 macOS 映像时,可能会发生这种情况,在我的例子中,已在多代 MacBook 上进行了克隆。对于参加 Ruby 新手训练营一周并在干净的系统上安装的人来说,一切都应该工作得很好。对于像我这样的人来说,几十年来一直是 engineer/mgr 并且可能有各种各样的 Ruby-ism 围绕着他几十年的 macOS 图像(由许多不同的 Ruby-based apps/guides 关于我如何安装东西;不知道这些程序中的许多实际上是相互冲突的),这可能是完全不同的故事。

Ruby 平台显然需要一个叫做 Version Manager to run a Ruby platform (interpreter, compiler, engine, whatever it's called). I chose the rbenv (based upon this reference) 版本管理器的东西来处理 removing/moving 所有旧东西之后我程序的 "install" 部分。

如果不是很明显,最好(大概?)避免同时安装和运行安装多个版本管理器。

安装选项

似乎有几种方法可以在 macOS 上安装 Ruby "core engine/platform"(我的语法,可能只有我用过),我发现有 3 个最常引用的选项以下。 (注意有many other version managers to choose from not listed below.) I chose rbenv based upon this reference.

  1. 通过rbenv
  2. 通过rvm
  3. 通过Homebrew

(1.)和(2.)是可以安装Ruby的机制,这些机制可以通过Homebrew安装。但是#1 和#2 不会通过 Homebrew 安装 Ruby。这可能会造成混淆。

似乎 (1.) 和 (2.) 还同时启用 Ruby 到 运行 的多个版本。 (3.) 可能不会。由于 version-to-gem/app 与 Ruby 的激进 (?) 功能移动的兼容性挑战,这可能会有所帮助,这有时会以向后兼容性为代价。 (我在这里猜测,但想不出其他好的解释;社区,请发表评论。)

"remove all old Ruby engines and files" 方法可能比较极端。我的经验: Ruby 的历史是一团糟,在 years/decades 上它留下了各种混乱的差异(在我的主目录中)。手动重建 gems 对我来说没什么大不了的——我的系统上没有那么多。通过保留预先存在的 Ruby-environment 文件,如果我需要恢复或重建东西,我(希望)被覆盖。而且,就目前而言,"clean and sane" 感觉好多了,因为它 "feels" 就像我已经删除了所有旧的东西。

更多背景

我和我的团队只是基于 Ruby 的应用程序的用户,而不是 Ruby 开发人员,并且在 Ruby 领域远没有经验。我们只想安装、使用和维护像 Asciidoctor 这样的应用程序,而不必 "dive in deep" 所有这些 Ruby 东西。几年来一切正常 - 然后所有 "cruft" 建立起来并开始破坏东西。当我把它全部拆掉并正确地重新安装(上图)——当我终于弄清楚所有 Ruby 的来龙去脉是如何工作的——事情又开始工作了。我相信,作为一个简单的 Ruby-应用程序用户,我不应该为了让 Ruby 应用程序工作而付出这种努力。简而言之:它不应该这么难。因此,我对难度的评论的性质。

此外,当我第一次发布这个问题时,我度过了糟糕的一天,并且不必要地激怒了这里正在努力提供帮助的几个社区成员——再一次,我很抱歉,这完全是我的错——从那以后我一直被一些人贴上了 "likes to complain alot." 的标签而且我完全应该在我的一些评论中使用这个标签是不合适的。再次道歉。

此外:我的 Ruby 问题仍然存在,无论这里的人是否想否认它,或者只是将问题归咎于我的刻薄。无论如何:我 对试图提供帮助的人感到失望;我对 Ruby 平台 不能很好地支持我的整体体验感到失望。

另请注意