【问题标题】:How to clean up or remove Gems如何清理或移除宝石
【发布时间】:2015-12-06 18:12:15
【问题描述】:

我想我已经把自己弄得有点乱了,我想请一些指点来清理它。 我安装了 RVM 和 Ruby 2.2.3(这是唯一的版本):

rvm list
rvm rubies
=* ruby-2.2.3 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

我只有基本的宝石:

rvm gemset list

gemsets for ruby-2.2.3 (found in /Users/Andrew/.rvm/gems/ruby-2.2.3)
=> (default)
   global

如果我查看一个截断的目录结构,我有:

~/.rvm/gems/ruby-2.2.3
~/.rvm/gems/ruby-2.2.3@global

如果我运行 gem env,我的路径是:

[..snip..]
  - GEM PATHS:
     - /Users/Andrew/.rvm/gems/ruby-2.2.3
     - /Users/Andrew/.rvm/gems/ruby-2.2.3@global
[..snip..]
  - SHELL PATH:
     - /Users/Andrew/.rvm/gems/ruby-2.2.3/bin
     - /Users/Andrew/.rvm/gems/ruby-2.2.3@global/bin
[..snip..]

据我所知,ruby-2.2.3 中的 gem 是最新的,但 ruby​​-2.2.3@globabl 中的不是。

在 IntelliJ IDEA 中,我引用了用于 ruby​​-2.2.3 和 ruby​​-2.2.3[Global] 的 SDK。在 Global gems 目录中,它列出了 ruby​​-2.2.3[global] 的 gems,我可以其中一些与 ruby​​-2.2.3 的 gems 版本不同。

我通过 google 进行了很多研究,但我仍然对如何升级 ruby​​-2.2.3@globabl 中的宝石以及是否需要升级感到困惑。我无法分辨这些 gem 与默认为空且 global 列出了大约 4 个 gem 的 gemset 之间的关系。

我想我可以做 gem clean 来摆脱旧的 gem 版本(但我在很多地方都读过这很危险),但这不会升级 ruby​​-2.2.3@global。我还担心它可能会破坏我也在努力解决的 IntelliJ Idea 环境!

我想做的是:

  • 了解路径 ruby​​-2.2.3 中的 gem 之间的关系, ruby-2.2.3@global
  • 了解这些宝石与宝石组之间的关系 默认和全局(如果有)。我的理解是 gemsets 应该使用在
    中定义的那些 gem 为每个项目创建 全球可供所有人使用。然后我对这些和
    感到困惑 捆绑器!
  • 如何升级路径 ruby​​-2.2.3@global 中的 gems
  • 如何安全地清理和清除旧宝石。特别, 不会搞砸 IntelliJ Idea

我还没有找到这一切的简单新手指南。也许最简单的事情是 rvm 内爆并重新开始?我正在尝试学习 ruby​​、ruby on rails、rspec。

【问题讨论】:

  • bundle clean 带有--force 选项。
  • rvm gemset 使用全局;宝石更新;宝石清理。 Global 是每个 ruby​​ 版本的所有 gemset 中可用的 gem。默认是您希望在每个 ruby​​ 版本中安装的 gem。
  • 所以如果我使用 rvm gemset 使用 global...这意味着更新将适用于 ~/.rvm/gems/ruby-2.2.3@global 中的 gem?那么我该如何切换回来 - rvm gemset default?
  • ` rvm ruby​​-2.2.3` 将在没有选择 gemset 的情况下返回正常版本。不知道确切的方法,但它一直对我有用
  • 在进行了更多挖掘之后,我添加了一个我认为可以涵盖您的问题的答案。)

标签: ruby-on-rails ruby intellij-idea gem


【解决方案1】:

Rvm 有一个 global gemset。此 gemset 允许您安装应该对您为已安装在 rvm 中的给定 ruby​​ 版本创建的所有其他 gemset 可用的 gem。

例如,您安装了 ruby-2.2.3 并创建了以下 gemset。 project1,project2。这两个项目都使用bundler,因此您可以将其安装在@global gemset 中(参见https://rvm.io/gemsets/global/)

rvm @global do gem install bundler

更新你可以做的宝石

rvm @global do gem update

或者看看那里有哪些宝石

rvm @global do gem list

现在,如果您创建 gemset project3,则已经为您安装了 bundler gem。

如果您安装不同的 ruby​​,例如 1.8.7,那么您在该全局中的所有 gem 都将不可用,因为它们仅对 2.2.3 是全局的。

如果您希望始终在所有 rubies 中安装某些 gem,您可以查看初始化文件。这些文件位于~/.rvm 中,由global.gems 和default.gems 组成。 (见https://rvm.io/gemsets/initial)。

~/.rvm/global.gems 中的 Gem 将在您安装新的 ruby​​ 时安装,并用于填充该 ruby​​ 的 global gemset。 ~/.rvm/default.gems 是相同的,保存它们将进入 rvm 创建的默认/空白 gemset。该页面底部的警告应标为默认情况下,当您升级 rvm 时它们会被覆盖。

Bundler 是一个完全不同的野兽,它是在 rvm 拥有 gemsets 之后出现的,它解决了类似的问题。在捆绑器(和 gemsets)之前,很容易陷入依赖地狱。其中一个项目使用版本 x 的 gem,而另一个使用版本 y,因此您需要同时安装这两个版本,但激活哪个版本等总是会导致问题。因此,当 rvm 出现时,您可以创建 gemset 以使每个项目的 gem 彼此分开。然后捆绑器出现了,它可以让你使用Gemfile 做大致相同的事情。因此,如果您的所有项目都在使用 bundler,您完全可以不使用每个项目的 gemsets,因为您只需将所有 gemsets 安装在默认 gemset 中,并让 bundler 进行依赖管理。

【讨论】:

  • 这是非常好的信息,Doon,谢谢。它实际上清除了我脑海中关于这些事物如何相互作用的许多疑问。非常感谢你。只是补充一下:我确实对你的答案投了赞成票,但我还没有足够的分数来显示它。
猜你喜欢
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多