2015-12-06 51 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,謝謝。實際上,我清理了很多關於這些事情如何相互作用的問題。非常感謝你。只是補充一點:我沒有投票答覆,但我還沒有足夠的分數來顯示。 –