仿生升级后卸载旧的 xenial Ruby 宝石

仿生升级后卸载旧的 xenial Ruby 宝石

当我升级到 Bionic 时,Ruby 从其默认的 Xenial 版本 2.3 升级到了其默认的 Bionic 版本 2.5。这意味着我通过 Ruby gem 安装的程序gem install不再起作用,并且gem uninstall也无法工作,因为它无法找到 Ruby 2.3 并退出。

我知道在 Ubuntu 上使用 gem 安装 Ruby 不是一个好习惯您需要进行开发,而我没有,但是我已经用它来安装以这种方式分发的可执行程序。

(我今后的打算是针对此类情况使用checkinstall和/或 PPA;我现在知道得更多了。但这个问题是关于清理的。)

举个例子,现在我有一个无法执行的 Rubygem 版本github-linguist,它的主要可运行版本安装在/usr/local/bin/linguist。我可以安装新的 Bionic apt 包ruby-github-linguist,除了安装到/usr/bin而不是之外/usr/local/bin,它还会将其可执行文件安装在名称github-linguist和之下git-linguist,而旧的 Rubygem 则安装在linguistgit-linguist(它们是两个不同的程序,新的github-linguist对应于旧的linguist)。

因此,我不仅遇到了名称冲突(并且由于各种原因,我将其放在了 PATH/usr/local/bin之前/usr/bin),而且旧版本/usr/local/bin也无法执行,并且gem uninstall也会失败。

正如我所说的,我已经吸取了教训,希望通过首先将此类程序(以及类似的基于 Pythoneasy_install的程序或 Golang 程序)在我的 PPA 中制作成 APT,当我从 Bionic 升级时就不必处理这个问题。

但是现在,我的系统上已经有了这个无用的东西(充其量)。我该如何从系统中删除这个和其他 Bionic Ruby 2.3 之前的 gem?

easy_install(我意识到对于使用 Python 、Go go get、Haskell cabal install、Node等安装的可执行文件,答案几乎肯定不同npm -i——但如果有一个可以在这些情况下使用的单一工具或策略,那就更好了。)

答案1

当您更改ruby版本时,您应该始终运行gem pristine --extensions以重新编译 C 扩展。这可能有助于在新版本的 ruby​​ 下使用您的旧 gem。您试过吗?

如果你希望卸载旧的 gems,请检查卸载旧版本的 Ruby gems在 Stack Overflow 上。

否则,在 Ubuntu 下有两种方法可以管理多个ruby版本并选择默认版本:

1)使用 Ubuntu折断而不是 Apt - 它允许你选择安装哪个版本,最新版本或任何以前的版本。请参阅官方 Ruby snap 现已发布在 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 PPA适用于 Ubuntu 的 Ruby 软件包这为您提供了几乎相同的选择(目前,他们尚未提供最新的 2.7 版本)。在这里,您必须依赖 Brightbox 继续为 Ubuntu 提供优化的 Ruby 包,就像他们多年来所做的那样。他们目前正在维护 Ruby 2.6、2.5、2.4、2.3、2.2、2.1、2.0、1.9.3 和 1.8.7 的包,您还可以在这些版本之间来回切换默认的 Ruby 版本。

相关内容