2012-01-14 66 views
1

的rbenv文檔指出您可以使用gemsets插件來Sandbox中的寶石,如果你不使用捆綁:rbenv or bundler gemset sandboxing?

Manage gemsets. Bundler is a better way to manage application dependencies. If you have projects that are not yet using Bundler you can install the rbenv-gemset plugin. 

不過,我使用的捆綁,當我的項目之間切換,具有不同gemsets我需要重新捆綁。當我使用rvm時,由於.gemsets文件,這很簡單。

在捆綁器中是否有沙箱功能,我不知道或者我誤解了文檔?

回答

4

打捆使用GemfileGemfile.lock文件,在根本上,做出由您透過這可能與rbevn使用墊片的方式做bundle exec

+2

但是,如果我在兩個使用捆綁軟件gemfiles的項目之間切換,我會有一大堆與當前項目無關的寶石。因此,捆綁包gemset不等同於gemset沙箱 – Coderama 2012-01-15 03:07:24

+0

但是,您也不會在同一臺機器上無緣無故地在多個gemset中安裝重複的寶石。它有什麼危害?使用bundler&bundle exec不會讓你訪問那些「其他」寶石 – cpjolicoeur 2012-01-15 17:55:50

+0

@Coderama即使有沙箱,每次需要升級Gemfile中的寶石時,都會有閒置的舊寶石四處閒逛。我想有人可以編寫一個清理腳本來使用當前的Gemfile.lock清理當前的沙箱...但爲什麼要麻煩? – Kelvin 2012-05-11 19:40:54

5

我發現這個明確,證據充分的解決方案:

Setting up and installing rbenv, ruby-build, rubies, rbenv-gemset, and bundler

現在,當創業板安裝(請參閱「捆紮機」一節)的東西它會去你的helloset寶石區。

您可以結合使用多個gemsets。

此設置的最大好處是可以使每個項目使用不同版本的不同版本的寶石。

閱讀標題爲Enable RVM-style 「gemsets」 (optional)的部分。

它使用gentsets的rbenv插件:https://github.com/jamis/rbenv-gemset

更新2012年8月12日
我正在使用它來管理兩個不同版本的Ruby項目,並分離出幾組寶石。它運作良好。

1

嘗試使用chgems與Bundler。對於RubyGems,chgems就像chroot。它產生了一個新的子殼,其中PATH,GEM_HOMEGEM_PATH更新爲使用$project/.gem/$ruby/$version作爲主要的GEM_HOME。由於所有gem都安裝在項目目錄中,所以在項目完成後清理就像rm -rf $project/一樣簡單。