Gemsets

如果你正在使用 RVM(Ruby Version Manager),那麼為每個專案使用 gemset 是個好主意。gemset 只是一個容器,可以用來保持寶石彼此分開。每個專案建立一個 gemset 允許你為一個專案更改 gems(和 gem 版本),而不會破壞所有其他專案。每個專案只需要擔心自己的寶石。

RVM 為每個紅寶石翻譯提供(> = 0.1.8)@global gemset。你為 @global gemset 安裝給定 ruby 的寶石可用於你與該 ruby 關聯建立的所有其他 gemset。這是允許所有專案共享特定 ruby 直譯器安裝的相同已安裝 gem 的好方法。

建立 gemsets

假設你已經安裝了 ruby-2.3.1 並且已使用此命令選擇它:

rvm use ruby-2.3.1

現在為這個 ruby 版本建立 gemset:

rvm gemset create new_gemset

其中 new_gemset 是 gemset 的名稱。要檢視 ruby 版本的可用 gemset 列表:

rvm gemset list

列出所有 ruby 版本的寶石:

rvm gemset list_all

使用列表中的 gemset(假設 new_gemset 是我想要使用的 gemset):

rvm gemset use new_gemset

如果你想轉換到其他一些 ruby 版本,你也可以使用 gemset 指定 ruby 版本:

rvm use ruby-2.1.1@new_gemset

為特定的 ruby 版本指定預設 gemset:

rvm use 2.1.1@new_gemset --default

要從 gemset 中刪除所有已安裝的 gem,你可以將其清空:

rvm gemset empty new_gemset

要將 gemset 從一個 ruby 複製到另一個 ruby,你可以通過以下方式完成:

rvm gemset copy 2.1.1@rails4 2.1.2@rails4

刪除 gemset:

rvm gemset delete new_gemset

檢視當前的寶石名稱:

rvm gemset name

在全域性 gemset 中安裝 gem:

rvm @global do gem install ...

在 Ruby 安裝期間初始化 Gemsets

當你安裝新的 ruby 時,RVM 不僅會建立兩個 gemset(預設的,空的 gemset 和全域性 gemset),還會使用一組使用者可編輯的檔案來確定要安裝的 gem。

~/.rvm/gemsets 工作時,rvm 使用基於正在安裝的 ruby 字串的樹形層來搜尋 global.gemsdefault.gems。使用 ree-1.8.7-p2010.02 的示例,rvm 將檢查(並從中匯入)以下檔案:

~/.rvm/gemsets/ree/1.8.7/p2010.02/global.gems
~/.rvm/gemsets/ree/1.8.7/p2010.02/default.gems
~/.rvm/gemsets/ree/1.8.7/global.gems
~/.rvm/gemsets/ree/1.8.7/default.gems
~/.rvm/gemsets/ree/global.gems
~/.rvm/gemsets/ree/default.gems
~/.rvm/gemsets/global.gems
~/.rvm/gemsets/default.gems

例如,如果你通過新增以下兩行來編輯~/.rvm/gemsets/global.gems

bundler
awesome_print

每次安裝新的 ruby 時,這兩個寶石都會安裝到你的全域性 gemset 中。在更新 rvm 期間,通常會覆蓋 default.gemsglobal.gems 檔案。