首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清除旧版gem中的gem

清除旧版gem中的gem
EN

Stack Overflow用户
提问于 2020-08-12 05:10:53
回答 3查看 182关注 0票数 0

我最近升级了我的发行版(Ubuntu从16.04升级到18.04),我猜要么是在升级中,要么是在常规的sudo update/upgrade调用中,gem已经升级了,我现在有2.7.6版本。我最近很少使用Ruby,但刚才我不得不运行一个jekyll/bundle命令,它返回给我它有一个糟糕的解释器(它正在寻找ruby2.3,并且它当前安装在2.5版本上)。

我的下一步将是更新jekyllbundle 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文件,因为它们现在已经没有用了?

EN

回答 3

Stack Overflow用户

发布于 2020-08-12 05:22:39

我强烈建议您使用像rvmrbenv这样的ruby版本管理器来管理安装在您系统上的不同ruby版本。

如果只想从磁盘中删除gem,可以使用命令bundle show $gem_name找到每个gem的位置,然后删除父目录以删除所有gem。您可能还需要删除Gemfile.lock以重置锁定的gem版本。

票数 2
EN

Stack Overflow用户

发布于 2020-08-12 06:21:43

下面是我的建议:

  1. 使用rbenv进行多ruby版本管理,无需定制
    • ruby installer插件现已包含在rbenv
    • 中它还可以自动处理Ruby可执行垫片,不再需要rbenv rehash <

    >H19它加载非常快(<代码>D10在shell shims上具有显著的加载时间

  1. 使用bundler在运行时动态解析gem (以下选项)
    • 足够快的gem需要一个特殊的gem解决方案,附带的bundler是/w /w now

动态调用bundler的选项(我推荐最后一个):

  1. 在每个ruby可执行文件前面使用bundle exec
    • 变体: create ruby

  1. 为每个项目创建bundle binstubs <LIST GEM EXECUTABLES YOU WANT>
    • 在每个ruby可执行文件前面使用bin/来调用ruby

  1. do #2,然后设置.git/safe
    • 允许您手动允许在项目根目录中查找bin/文件夹的路径,而
    • 不需要输入bin/ do

现在,多个gem版本都将被安装到同一个Ruby版本存储桶中,您可以让bundler在每次启动之前动态地将正确的版本添加到加载路径中。

删除Ruby版本还意味着删除为该Ruby版本安装的所有gem(以及这些gem的版本)。

票数 2
EN

Stack Overflow用户

发布于 2020-08-12 20:38:59

我要感谢这两个答案。我赞成他们,因为即使他们不是我的问题的直接解决方案,但他们给出了很好的方向来防止它。

注意:这些是我采取的步骤,这并不意味着它们是正确的方法,所以不要把它们当作参考而不是指南。

下面是我清理旧Ruby版本gem的方法:

首先,我需要为

  • 添加一个环境变量,以便gem能够找到那些过时的get,通过运行gem contents name_of_gemsudo 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会有可执行文件,卸载时会询问你是否要删除它。我无法让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中的脚本/可执行文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63366423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档