当我升级到Bionic时,Ruby从默认的Xenial版本2.3升级到了默认的Bionic版本2.5。这意味着我通过gem install安装的Ruby提供的程序不再工作,而gem uninstall也不能工作,因为它找不到Ruby2.3并退出了。
我知道在Ubuntu上使用gem安装开发所需的Ruby库不是一个很好的实践,我也没有,但我用它来安装以这种方式分发的可执行程序。
(我打算在这种情况下使用checkinstall和/或PPA;我现在更清楚了。但这个问题是关于清理的。)
举个例子,现在我有一个Rubygem github-linguist的不可执行版本,它的主要运行程序安装在/usr/local/bin/linguist中。我可以安装新的仿生apt包ruby-github-linguist,它除了安装到/usr/bin中而不是/usr/local/bin中,还可以在github-linguist和git-linguist的名称下安装它的可执行文件,在这两个名称中,旧的Rubygem安装了linguist和git-linguist (它们是两个不同的程序,新的github-linguist对应于旧的linguist)。
因此,我不仅有一个名称冲突(出于各种原因,我把/usr/local/bin放在了/usr/bin之前),而且/usr/local/bin中的旧版本是不可能执行的,gem uninstall也失败了。
正如我说过的,我已经吸取了教训,希望通过在我的PPA中首先将这样的程序(以及类似的easy_install-based程序或Golang程序)变成APT,我将不必在从仿生升级时处理这个问题。
但是现在,我已经在我的系统上有这个无用的(充其量)巡航。如何从我的系统中删除这个和其他预仿生Ruby 2.3宝石?
(我意识到,对于使用Python的easy_install、Go的go get、Haskell的cabal install、Node的npm -i等安装的可执行文件来说,答案几乎肯定是不同的--但如果在这种情况下可以使用单一的工具或策略,那么越好越好。)
发布于 2020-02-11 19:04:57
更改ruby版本时,应该始终运行gem pristine --extensions来重新编译C扩展。它可以方便地使用你的旧宝石在新版本的红宝石。你试过吗?
如果您希望卸载旧的宝石,请检查堆栈溢出上的卸载Ruby宝石的旧版本。
否则,在Ubuntu下有两种方法来管理多个ruby版本并选择默认版本:
1)使用Ubuntu 捕捉而不是Apt --它允许您选择要安装的版本,最新版本还是以前版本。有关说明,请参阅官方的Ruby快照是可用的在Ruby.org网站上的帖子。为了避免可能的冲突,您可能需要先卸载已安装的apt版本,方法是运行
sudo apt remove ruby && sudo apt autoremove使用snap安装的主要优点是Ruby.org和Ubuntu的官方支持。您可以降级或升级要使用的版本。首先运行snap info ruby列出所有可用版本(当前为2.3到2.7),然后按照上面链接的说明选择要安装的版本(多个版本可以共存)并在它们之间切换。
2)如果您更喜欢使用Debian的Apt包管理工具,您可以依赖Brightbox 用于Ubuntu的Ruby包,它给您提供了几乎相同的选择(目前,它们还没有提供最新版本2.7)。在这里,您必须依赖Brightbox继续为Ubuntu提供优化的Ruby包,就像他们多年来所做的那样。他们目前正在维护Ruby2.6、2.5、2.4、2.3、2.2、2.1、2.0、1.9.3和1.8.7的包,您还可以在不同版本之间来回切换默认的Ruby版本。
https://askubuntu.com/questions/1154445
复制相似问题