我最近升级了我的发行版(Ubuntu从16.04升级到18.04),我猜要么是在升级中,要么是在常规的sudo update/upgrade调用中,gem已经升级了,我现在有2.7.6版本。我最近很少使用Ruby,但刚才我不得不运行一个jekyll/bundle命令,它返回给我它有一个糟糕的解释器(它正在寻找ruby2.3,并且它当前安装在2.5版本上)。
我的下一步将是更新jekyll和bundle gem(以便它们更新解释器版本),但令我惊讶的是,当我运行gem list时,它们没有列出。它们显然是因为有一个/usr/local/bin/jekyll可执行文件和一个/usr/local/bin/bundle可执行文件而安装的。但我认为当gem升级时,它开始检查不同文件夹中的gem(我猜是/var/lib/gems/2.5.0),但jekyll/bundle显然在/var/lib/gems/2.3.0中。我只需要在2.5.0版本上安装jekyll/bundle就可以了,但是有没有办法从旧版本中删除所有的gem文件,因为它们现在已经没有用了?
发布于 2020-08-12 05:22:39
发布于 2020-08-12 06:21:43
下面是我的建议:
rbenv进行多ruby版本管理,无需定制rbenv rehash <>H19它加载非常快(<代码>D10在shell shims上具有显著的加载时间
动态调用bundler的选项(我推荐最后一个):
bundle exec bundle binstubs <LIST GEM EXECUTABLES YOU WANT> bin/来调用ruby.git/safe bin/文件夹的路径,而bin/ do现在,多个gem版本都将被安装到同一个Ruby版本存储桶中,您可以让bundler在每次启动之前动态地将正确的版本添加到加载路径中。
删除Ruby版本还意味着删除为该Ruby版本安装的所有gem(以及这些gem的版本)。
发布于 2020-08-12 20:38:59
我要感谢这两个答案。我赞成他们,因为即使他们不是我的问题的直接解决方案,但他们给出了很好的方向来防止它。
注意:这些是我采取的步骤,这并不意味着它们是正确的方法,所以不要把它们当作参考而不是指南。
下面是我清理旧Ruby版本gem的方法:
首先,我需要为
gem能够找到那些过时的get,通过运行gem contents name_of_gem和sudo GEM_PATH=/var/lib/gems/2.3.0 gem uninstall -i /var/lib/gems/2.3.0 name_of_gem,可以获得get的内容和规范,并分别卸载那些用sudo GEM_PATH=/var/lib/gems/2.3.0 gem uninstall -i /var/lib/gems/2.3.0 name_of_gem过时的get。在我的例子中,我安装了sudo,所以我需要sudo,由于sudo的安全策略,这也需要我再次设置环境变量。另外,出于某些原因,我需要手动设置安装目录。gem uninstall删除它,因为它声明我没有对/var/lib/gems/2.3.0/bin的写权限(这很奇怪,因为EXECUTABLE DIRECTORY gem环境变量是/usr/local/bin)。我要求gem不要删除可执行文件,写下它们的名称,然后手动从EXECUTABLE DIRECTORY文件夹中删除它们。您还可以使用which gem_executable_name找出它的位置。卸载所有gem之后,我相信删除/var/lib/gems/2.3.0文件夹及其内容是安全的。在所有这些文件上运行gem contents只会返回这个文件夹中的文件,所以我相信唯一的外部文件是添加到/usr/local/bin中的脚本/可执行文件。
https://stackoverflow.com/questions/63366423
复制相似问题