如何清理或移除宝石

时间:2015-12-06 18:12:16

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

我想我已经陷入了一些混乱,我想要清理它的一些指示。 我安装了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中的宝石是最新的,但ruby-2.2.3 @globabl中的宝石不是。

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

我通过谷歌进行了很多研究,但我仍然对如何获得ruby-2.2.3@globabl中的宝石进行了升级以及是否需要。我无法分辨这些宝石和宝石集之间的关系,默认情况下这些宝石是空的,全局列出了大约4个宝石。

我想我可以做宝石干净以摆脱旧的宝石版本(但我已经阅读了许多危险的地方),但这不会升级ruby-2.2.3@global。我也担心它可能搞砸了我的IntelliJ Idea环境,我也在努力让我的头脑无处可去!

我想做的是:

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

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

1 个答案:

答案 0 :(得分:2)

Rvm有一个global宝石集。这个gemset允许你安装宝石,这些宝石对于你在rvm中安装的给定版本的ruby所创建的gemset可以使用。

例如,您已安装ruby-2.2.3,并且您已创建以下gemsets。 project1project2。两个项目都使用bundler,而不是拥有2个副本,您可以将其安装在@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。

如果你安装了一个不同的红宝石说1.8.7,那么这个全局中的所有宝石都不可用,因为它们只是2.2.3的全局宝石。

如果您想在所有红宝石中安装某些宝石,可以查看初始化文件。这些文件位于~/.rvm,由global.gemsdefault.gems组成。 (见https://rvm.io/gemsets/initial)。

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

Bundler是一个完全不同的野兽,并且在rvm拥有gemsets之后出现,它解决了类似的问题。在捆绑器(和gemsets)之前很容易遇到依赖地狱。如果一个项目使用了gem的x版本,而另一个使用了y版本,那么你需要安装两个,但是哪一个被激活,等等总是会引起问题。因此,当rvm出现时,您可以创建gemsets以保持每个项目宝石彼此分离。然后捆绑者进入了exisitance,让你使用Gemfile做大致相同的事情。因此,如果您的所有项目都在使用bundler,那么您可以在不使用每个项目gemsets的情况下完全逃脱,因为您只需在默认gemset中安装所有gemset,并让Bundler归因于依赖关系管理。