2013-10-11 48 views
2

所以,我一直在使用這樣的錯誤做法得到:使用「sudo gem update」的長期後果是什麼?

sudo gem update [user-defined-gem-command] 

更新所有我的寶石和紅寶石相關的東西的時候。

雖然我知道這樣做,但RVM和Rubygems的製造商真的不鼓勵這樣做。它應該與sudo gem update安裝所有寶石到系統版本的Ruby。

有人可以解釋這樣做的後果嗎?

我現在正在更改爲使用RVM來安裝我的Gems和Ruby相關更新。有沒有辦法解決我使用s​​udo安裝創建的任何損害?或者這是一個小問題?

+0

'sudo寶石更新'已被科學證明會導致蛀牙和頭皮屑,所以不要使用它。其實它更新了Ruby的「系統」。只要你沒有'寶石卸載...'任何寶石,你應該沒問題。使用RVM或rbenv並閱讀他們的指示,瞭解如何正確使用他們的功能並更新其環境中的寶石。基本上,使用這些工具,您再也不需要使用'sudo'來進行標準安裝。 –

回答

2

使用sudo只是一個問題,如果您使用RVM或rbenv。如果您使用的是bog標準Ruby,則在大多數安裝中,sudo需要,因爲您的非特權用戶不擁有Ruby安裝。 RVM和rbenv建立在用戶編譯和擁有自己的紅寶石的概念之上 - 如果在這種情況下使用sudo,則會破壞模型; root會編譯,安裝並擁有Ruby和寶石。 (並且,根據您的環境,gem可能會安裝在系統Ruby中,而不是您在rbenv/RVM中定義的那個)。

+0

使用「sudo」進行更新應該是安全的。使用它來移除可能會在Mac OS上造成問題,因爲蘋果公司爲了他們自己的目的預先安裝了Ruby,並且移除寶石可能會導致事情中斷。更新它們不應該破壞任何東西。 –

+0

我不同意,'sudo'不保留環境變量,將它與任何ruby環境管理器一起使用並不安全。 – mpapis

0

你可以去sudo gem uninstall列出的所有寶石sudo gem list

我不認爲這是必要的。所有可能的有害事情都會在安裝過程中出現(即以root權限執行)。

只需繼續並使用rvm,rbenv,chruby或任何您想要的虛擬ruby環境管理器。

+0

「你可以去和sudo寶石卸載sudo寶石列表中列出的所有寶石」?如果在Mac OS上運行,請勿*執行此操作。蘋果公司爲他們自己的目的安裝Ruby,卸載他們的寶石將破壞他們的Ruby。 –

+0

@theTinMan這是真的,但沒有人使用過那個紅寶石... – phoet

+0

@theTinMan我沒有看到OS X上的任何預裝gems – Stefan

0

如果您使用sudo gem install沒有損害 - 這只是浪費空間,您可以使用sudo gem uninstall將其恢復。

對於任何Ruby版本管理器,當您使用sudo gemsudo不重置你的環境變量*它可能會危險,這可以有效地禁用您嘗試使用Ruby環境切換,並讓你回到你的系統的紅寶石。

「*有極少數情況下,你可以配置你的sudo要麼保護環境(安全性差的做法),或有一些額外的環境(繁複的保養)。