如何解决清除旧版宝石中的宝石
我最近将发行版(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文件了,因此有办法删除它们吗?
解决方法
我强烈建议您使用rvm或rbenv之类的Ruby版本管理器来管理系统上安装的不同Ruby版本。
如果只想从磁盘上删除gem,则可以使用命令bundle show $gem_name
找到每个gem的位置,然后删除父目录以删除所有的gem。您可能还需要删除Gemfile.lock
才能重置锁定的gem版本。
这是我推荐的:
- 使用
rbenv
进行多个Ruby版本管理,无需自定义- rbenv现在随附了ruby安装程序插件
- 它还自动处理ruby可执行文件填充,不再需要
rbenv rehash
- 加载速度非常快(
rvm
在启动shell时有明显的加载时间)
- 使用捆绑程序在运行时动态解析gem(以下选项)
- 反正足够快
- 不需要特殊的gem解决方案,捆绑程序自带/ w Ruby
动态调用捆绑程序的选项(我建议使用最后一个):
- 在每个ruby可执行文件前使用
bundle exec
- 变体:创建
alias be='bundle exec'
- 变体:创建
- 为每个项目创建
bundle binstubs <LIST GEM EXECUTABLES YOU WANT>
- 在每个ruby可执行文件前面使用
bin/
来调用binstubs。
- 在每个ruby可执行文件前面使用
- 执行#2,然后设置
.git/safe
- 让您在该项目的根目录中手动允许对
bin/
文件夹的PATH查找 - 不需要再输入
bin/
- 让您在该项目的根目录中手动允许对
现在,多个gem版本都将安装到同一个Ruby版本存储桶中,并且让bundler在每次启动前将正确的版本动态地添加到加载路径中。
删除Ruby版本也将意味着删除为该Ruby版本安装的所有gem(以及这些gem的版本)。
,我要感谢两个答案。我赞成他们,因为即使他们不能直接解决我的问题,他们也给出了预防的指导。
注意:这些是我采取的步骤,并不意味着它们是正确的方法,因此不要将其作为参考而非指导。
这是我清理那些旧的Ruby版本的宝石的方法:
- 首先,我需要为
gem
添加一个环境变量,以便能够通过运行GEM_PATH=/var/lib/gems/2.3.0
找到那些过时的宝石。 - 然后可以使用
gem contents name_of_gem
和gem specification name_of_gem
获取宝石的内容和规格。 - 我逐个卸载了
sudo GEM_PATH=/var/lib/gems/2.3.0 gem uninstall -i /var/lib/gems/2.3.0 name_of_gem
弃用的那些gem。在我的情况下,我进行了sudo
安装,因此我需要sudo
,由于sudo
的安全策略,我还需要我再次设置环境变量。另外,出于某种原因,我需要手动设置安装目录。 - 某些gem将具有可执行文件,卸载将询问您是否要删除它。我无法删除
gem uninstall
,因为它声称我没有对/var/lib/gems/2.3.0/bin
的写入权限(这很奇怪,因为EXECUTABLE DIRECTORY
gem环境变量是{{1 }}。我要求/usr/local/bin
不要删除可执行文件,写下它们的名称,然后从gem
文件夹中手动删除它们。您还可以使用EXECUTABLE DIRECTORY
来查找它的位置。
卸载所有gem后,我相信删除which gem_executable_name
文件夹及其内容是安全的。在所有这些文件上运行/var/lib/gems/2.3.0
只返回了我在该文件夹中的文件,因此我相信唯一的外部文件是添加到gem contents
的脚本/可执行文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。