我如何删除(所有旧的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的、rbenv
和rvm
,以及任何其他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
(在make
和make 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帽子时会很有趣。为了这个任务,我只戴了我的系统管理员帽子。
我在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版本:
rbenv install-l
。rbenv install 5.5.0
。rbenv版本
。rbenv global 5.5.0
。rbenv local 5.5.0
。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.【可选】在新环境中重新安装以前的宝石。
我查看了我以前的. 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的东西可以散落在许多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
。
rbenv
rvm
(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的有用答案。