提问者:小点点

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


我如何删除(所有旧的Ruby东西),重新安装(最好是一个且仅有一个Ruby版本),并使用“Ruby社区首选”方法(一些安装/版本管理器或类似工具)在我的macOS 10.14.6系统上测试我的整个Ruby环境(版本mgrs,宝石,但这可行)?

我正在寻找整个过程,所有与Ruby环境相关的东西:Ruby“引擎”、版本管理器、。bash_profile编辑等。

尽管我们(我的团队)不是Ruby开发人员,但我们正在运行几个基于Ruby的应用程序,比如Asciidoctor。因此,我们只是用户,除了试图让应用程序(如Asciidoctor)毫无问题地运行之外,并没有投入精力学习Ruby的所有细节,仅此而已。

1.移除。

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

因此,请考虑所有可能在整个历史或Ruby中安装的历史Ruby主义,因为我很可能从Ruby的早期就开始安装它们,并且我/我们仍然拥有我们一直在继承的相同macOS映像(跨升级的MacBook硬件)。

确保这些东西都不见了(或者至少移出了一条功能路径),以确保我们有一个干净的历史…

2.重新安装。

我们到底在安装什么以及为什么要安装它还不清楚。当我们只想要一个版本时,为什么我们需要一些东西来管理Ruby的版本?我们需要多个版本的Ruby有什么原因吗?我们必须将Ruby“东西”与Ruby“版本管理器”分开吗?是否有“为非Ruby开发人员傻瓜安装Ruby”资源来帮助指导我们完成此操作?

(我不熟悉“版本管理器”这个术语来描述解释器/编译器软件的实际版本。作为一名长期的swdev经理,我习惯于管理我的团队正在开发的软件的版本。我们猜测这可能是由Ruby世界驱动的可能不会尝试强制执行尽可能多的跨Ruby版本兼容性,但我们只是推测。诚然,我们倾向于用C/C/Python之类的东西进行更多的系统编程,而不是JavaScript/Ruby之类的特定于Web的东西。也许后者没有那么“我是一名开发人员,我不编写跨版本平台的可移植代码/我是一名编程语言/平台设计师,不太关心跨版本兼容性。”这对我们来说是一个新世界。)


3.测试。

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

如果我不这样做,历史告诉我,我以后会遇到Ruby不稳定的环境问题。如果可能的话,我想一次完成所有事情的“设置并忘记它”,避免遇到未来的问题。

想想历史的东西,比如make test(在makemake install之后)和brew医生


我的macOS 10.14.6上的Ruby环境/子系统不稳定、损坏且令人沮丧。所述环境是多年(数十年)Ruby内容/层堆积到我的macOS环境中的结果(随着时间的推移,它在MacBook上被克隆,因此被继承)。

我试图重建它并清理它,试图获得某种程度的理智。它大部分(?)似乎是有效的,至少对于运行来说是如此。但是rvm相关的东西仍然失败——我甚至需要rvm(这还不清楚,就像Ruby设置中为非Ruby开发人员提供的许多东西一样)。我仍然有很多红宝石主义在. bashrc中徘徊,看起来不健康(为什么这么多$PATH条目…?),或者至少让我不舒服。

我在StackExchange.com和其他地方发现了至少20个不同的“重新安装/重建”参考,其中许多提供了不同的基于自制的程序。

我的gem env输出。请注意与某些类ruby组件关联的所有这些不同版本:

3.1.2, 2.7.0, 2.7.1, 2.2.1, 2.2.0, 1.1.2

那是六个不同的子系统版本。在我看来,这很糟糕。

(我不是Ruby开发人员,所以请原谅我糟糕的Ruby“语法”。)

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

从这个用户的角度来看:Ruby世界感觉混乱和不必要的复杂。随着Ruby的流行,我相信这是有原因的。我的猜测是:Ruby重视功能进步而不是平台稳定性。当我戴着系统管理员帽子时,这不是最棒的事情;戴着我的swdev帽子时会很有趣。为了这个任务,我只戴了我的系统管理员帽子。


共3个答案

匿名用户

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

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

>

  • 在终端中输入brew install rbenv以安装rbenv。
  • ~/中添加命令val"$(rbenv init-)"。bash_profile使rbenv在打开终端时自动加载。
  • 键入source~/。在终端中bash_profile以应用您对当前shell会话所做的更改。
  • 在终端中键入键入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版本
    • 要使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以确保设置正确完成。

  • 匿名用户

    你试图用自制软件安装一个或多个红宝石,然后希望你的宝石环境保持理智。不要。不要。

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

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

    匿名用户

    (请确保在此答案末尾看到背景部分。)

    1.删除所有现有的Ruby东西(除了Apple为macOS的“核心系统”安装的Ruby“系统”文件)。

    这是过程中我不太确定的部分。我已经在superuser.com询问了“如何删除所有可能的,旧的Ruby cruft”,并将在那里学到的任何东西导入到这个过程中。与此同时,我发现了一些与Ruby相关的东西(例如:~/. ruby-version),我无法轻易找到任何留档/引用。这是一次小小的冒险。但这是我想到的:

    a)基于Homebrew的东西:brew卸载ruby ruby-build rbenv和任何其他面向Ruby的Homebrew包。brew list|grep有助于查找包。

    b)rvm卸载——但请先阅读下面的“旧文件垃圾”注释,以保留您的旧rvm环境以供参考。

    c)您可以找到或想到的任何其他卸载(当然是非Apple-macOS系统安装),可能包括在https://rvm.io和https://github.com/rbenv/rbenv找到的过程以及您可以找到/想到的任何其他版本管理器导致的安装。

    2.从$HOME中删除或移动旧的Ruby文件粪便

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

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

    3.(重新)根据这个单行命令安装最新的“稳定”(?)rbenv/“ruby引擎”(这假设Homebrew已经安装),给定rbenv版本管理器选择,如下背景部分所述:

    brew update
    brew install rbenv
    

    上面没有通过Homebrew安装“Ruby引擎”;相反,它安装rbenv(通过家庭酿造),它又根据以下内容安装“Ruby引擎”:

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

    4.注释/删除以前的~/。bash_profile过去Ruby主义的更新

    我最终注释掉了过去Ruby驱动更新中的所有这些行,这些行似乎未被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.启动一个新的macOSTerminal.app窗口(或iTerm2或类似)。

    7.【可选】在新环境中重新安装以前的宝石。

    我查看了我以前的. rvmbin列表:

    $ 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的东西可以散落在许多Ruby社区称之为红宝石的地方),并为我想在新的(干净、新鲜和理智的)Ruby环境中重用的每个包运行gem install[gem-pack]。我在我团队相当复杂的asciidoctor文档库上运行了一些初始的asciidoctor测试,最初看起来一切都很好。

    我们希望有一些重要的Ruby引擎集“自我诊断”(一个更简单的例子:brew医生),让用户更有信心他们的“Ruby引擎”功能最佳。唉,我还没有看到Ruby有这样的东西。

    从这里向前迈进,我可以通过rbenv构建多个“红宝石”,并且只有rbenv。在我通过多个安装程序/版本管理器(Homebrew、rvm和rbenv)管理多个红宝石之前,这可能是许多问题的原因,可能是根据Todd的观点。

    Ruby有点复杂,使用版本管理器可能会运行得更好。至少从我几十年的swdev系统管理员经验来看,我觉得这有点不寻常。我当然可以看到所有这些机制是如何非常强大的。目前,我只是想让我的Ruby平台工作。

    据我所知,在macOS上安装和运行Ruby没有“一种标准方式”,也没有一个标准目录可以放置。这意味着没有“一种标准方式”可以卸载,所以如果他们(经常像我一样不知不觉地)安装了许多不同的Ruby版本(我猜叫做“Rubie”?)多年来(几十年?)在许多不同的文件/目录中,由多个不同的“版本管理器”控制(我猜?一会儿更多关于版本管理器的内容)。也就是说,我发现我必须“寻找和啄”过去Ruby安装/version_managers可能将文件/目录放置在不同区域的所有历史方式。

    请注意,当你有一个已经存在多年的macOS映像时,就我而言,它已经被几代MacBook克隆了。对于一个去Ruby训练营一周并安装在干净系统上的人来说,一切都应该运行良好。对于像我这样的人来说,他已经做了几十年的工程师/经理,可能对他几十年前的macOS映像有各种各样的Ruby主义(由许多不同的基于Ruby的应用程序/指南指导我如何安装东西;不知道这些过程中的许多实际上是相互冲突的),情况可能完全不同。

    Ruby平台显然需要一个叫做版本管理器的东西来运行Ruby平台(解释器、编译器、引擎,不管它叫什么)。在删除/移动所有旧东西后,我选择了rbenv(基于此参考)版本管理器作为我过程的“安装”部分。

    如果这还不明显,最好避免同时安装和运行多个版本管理器。

    似乎有几种方法可以在macOS上安装Ruby“核心引擎/平台”(我的语法,可能只有我自己使用),下面列出了我发现的3个引用最多的选项。(注意,下面没有列出许多其他版本管理器可供选择。)我根据这个参考选择了rbenv

    1. 通过rbenv
    2. 通过rvm
    3. 通过自制

    (1.)和(2.)上面是可以安装Ruby的机制,这些机制可以通过Homebrew安装。但是#1和#2不会通过Homebrew安装Ruby。这可能会令人困惑。

    看起来(1.)和(2.)也允许多个版本的Ruby同时运行。(3.)可能不会。这可能会有所帮助,因为Ruby的激进(?)功能移动带来了版本到gem/app的兼容性挑战,有时会以向后兼容为代价。(我在这里猜测,但不能提出其他好的解释;社区,请评论。)

    “删除所有旧的Ruby引擎和文件”的方法可能是极端的。我的经验是:Ruby的历史一团糟,在过去的几年/几十年里,它留下了各种各样混乱的差异(在我的主目录中)。手工重建宝石对我来说没什么大不了的——我的系统上没有那么多。通过保留预先存在的Ruby环境文件,如果我需要恢复或重建东西,我(希望)可以得到保护。现在,事情感觉更加“干净和理智”,因为“感觉”就像我已经删除了所有旧的东西。

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

    此外,当我第一次发布这个问题时,我度过了糟糕的一天,不必要地激怒了这里几个努力帮忙的社区成员——再次道歉,这完全是我的错——从那以后,我被一些人贴上了“喜欢抱怨很多”的标签我完全应该在我的一些评论中被贴上不恰当的标签。再次,我道歉。

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

    另请注意TamerB的有用答案。