2015-12-06 52 views
1

我想我已经陷入了一片混乱,我想在清理它的一些指针。 我已经安装了RVM和Ruby 2.2.3(这是唯一的版本):如何清理或删除宝石

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

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

我只带了基本gemsets:

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/[email protected] 

如果我运行的宝石包膜,我的路径是:

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

据我所知,ruby-2.2.3中的宝石是最新的,但[email protected]中的宝石不是。

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

我已经研究了很多通过谷歌,但我仍然困惑如何获得宝石[email protected]升级,是否我需要。我不能说出这些宝石和默认为空的宝石之间的关系,全球列出了大约4宝石。

我在想,我可以做宝石干净,摆脱旧的宝石版本(但我读过一些危险的地方),但不会升级[email protected]。我也担心它可能会搞砸我的IntelliJ Idea环境,而我也在努力让自己的头脑变得更好!

我想要做的是这样的:

  • 理解的路径红宝石2.2.3, ruby​​[email protected]
  • 宝石之间的关系理解之间的关系这些宝石和宝石 默认和全球(如果有的话)。我的理解是,应该为每个项目创建宝石套装 ,这些宝石定义在
    全球可供所有人使用。然后我很困惑这些和
    Bundler!
  • 如何升级路径中的宝石[email protected]
  • 如何安全地清理和摆脱旧的宝石。特别是, 没有搞砸IntelliJ Idea

我还没有找到一个简单的小菜指南,所有这一切。也许最简单的事情是rvm内爆并重新开始?我试图学习红宝石,红宝石在rails上,rspec。

+0

'bundle clean' with'--force'选项。 –

+1

rvm gemset use global;宝石更新;宝石清理。 Global是每个Ruby版本的所有宝石中可用的宝石。默认是宝石你想要在每个ruby版本中安装。 – Doon

+0

所以如果我使用rvm gemset使用全球...这将意味着更新将适用于~/.rvm/gems/[email protected]的宝石?那么我怎么切换回来 - rvm gemset默认? –

回答

0

Rvm有一个global gemset。这个gemset允许你安装gemset,这些gem应该可以被你为你在rvm中安装的给定版本的ruby创建的每个gemset都可用。

例如,您安装了ruby-2.2.3,并且您已创建以下gemsets。 project1,project2。这两个项目都使用bundler,从而相对于具有2个副本,你可以在@global宝石安装(见https://rvm.io/gemsets/global/

rvm @global do gem install bundler

更新的宝石,你可以做

rvm @global do gem update

或看哪些宝石

rvm @global do gem list

现在,如果您创建gemset project3,则捆绑软件gem已经为您安装。

如果你安装了一个不同的ruby,如1.8.7,那么你的全球范围内的任何宝石都将不可用,因为它们只是全局的2.2.3

如果你想要在你所有的ruby中总是安装某些gem,你可以看看初始化文件。这些文件位于~/.rvm中,由global.gemsdefault.gems组成。 (见https://rvm.io/gemsets/initial)。

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

Bundler是一个完全不同的野兽,并在rvm拥有gemsets后出现,它解决了类似的问题。在bundler(和gemset)之前,很容易陷入依赖地狱。如果一个项目使用gem版本x,而另一个使用y版本,那么你需要安装两个版本,但是哪一个启动了,等等总是会引发问题。所以当rvm出现时,你可以创建gemset来保持每个项目的宝石彼此分离。然后打包商进入存在,这使您可以使用Gemfile做大致相同的事情。因此,如果您的所有项目都使用捆绑程序,则无需使用每个项目gemset即可完全脱身,因为您只需将所有gemset安装在默认gemset中,并让bundler应付依赖关系管理。

+0

这是非常好的信息Doon,谢谢。实际上,我清理了很多关于这些事情如何相互作用的问题。非常感谢你。只是补充一点:我没有投票答复,但我还没有足够的分数来显示。 –