2015-01-13 118 views
1

我的機器上的一些寶石的舊版本,有多個版本:拆卸寶石

$gem list bigdecimal 
bigdecimal (1.2.6, 1.2.5) 

$gem list io-console 
io-console (0.4.3, 0.4.2) 

$gem list json 
json (1.8.2, 1.8.1) 

... 

我想刪除舊版本。我嘗試了幾個命令:

$gem cleanup 
Cleaning up installed gems... 
Clean Up Complete 

$sudo gem cleanup 
Cleaning up installed gems... 
Clean Up Complete 

$gem cleanup json 
Cleaning up installed gems... 
Clean Up Complete 

$sudo gem cleanup json 
Cleaning up installed gems... 
Clean Up Complete 

但舊版本不會被刪除。爲什麼舊版本不能被cleanup檢測到?我怎樣才能刪除它們?

更新奇怪的是,我可以手動卸載較新版本,但不是舊版本。例如,

$ sudo gem uninstall json --version 1.8.1 
ERROR: While executing gem ... (Gem::InstallError) 
    gem "json" cannot be uninstalled because it is a default gem 

$ sudo gem uninstall json --version 1.8.2 
Successfully uninstalled json-1.8.2 

更新什麼是默認的寶石?爲什麼它不能被刪除?

更新如果我有一個默認的舊版本,它意味着一個新的版本是未使用,默認一個由命令require叫什麼?

回答

1

gem cleanup可能不起作用,因爲您在這些舊版本上安裝了某些依賴項。您可以通過運行gem dependency your-gem-name --reverse-dependencies來檢查對舊寶石的依賴性。

如果該命令沒有顯示任何依賴關係,您可以手動gem uninstall刪除舊版本:

# remove specific version 
gem uninstall your-gem-name --version 2.1.0 

# remove all versions less than a certain version 
gem uninstall your-gem-name --version '<2.1.0' 
+1

我試過'$ sudo的寶石卸載JSON --version 1.8.1',它給 '錯誤:執行gem時...(Gem :: InstallError) gem「json」無法卸載,因爲它是默認的gem'。 – sawa

+0

您使用RVM嗎? – BarFooBar

+0

不,我不使用RVM。 – sawa