2011-04-28 30 views
7

我不確定這兩個工具之間有什麼不同。似乎有很大的重疊,但我一直在使用RVM並面臨一些未解決兼容性問題。Bundler提供什麼RVM?

Bundler做了哪些RVM不能做的事情?

回答

11

他們服務於不同的目的。 RVM創建一個沙箱來管理你的Ruby安裝。作爲其中的一部分,它也可以讓你定義gemsets。

Bundler不管理你的Rubies,它與當前選定的Ruby一起工作。

所以,我覺得你應該考慮RVM作爲開發環境配置管理器,並捆綁寶石經理的應用程序。


編輯:更多的想法 -

無論我們使用RVM與否,通常我們不得不來加載所有我們要使用手動應用程序的寶石,使用gem install blah爲每我們想用的寶石。

我最終通過手動管理我的寶石跨多個紅寶石。安裝完成後,我可以使用RVM創建gemset,但如果沒有安裝gemm,RVM將不會自動檢索gem的特定版本,或者如果它被刪除,則再次獲取它。由於RVM更關心Ruby環境,因此它主要將寶石版本設置爲gem和我們。

捆紮機,在另一方面,確實有關RVM那些缺失的部分護理。當您爲捆綁器創建Gemfile時,它將檢索必要的寶石和指定的特定版本。因此,在另一臺機器上安裝Ruby應用程序的任務變得更加簡單。將文件推送到另一臺機器上,然後運行bundle install,剩下的就完成了。

它與Rails很好地協作,並且是我的生產文件的合理解決方案。這比我爲了在同一主機上運行Perl應用程序而必須處理Perl發行版要簡單得多。

+0

+1,沒錯,你無法在沒有捆綁器的情況下啓動你的Rails應用程序,所以我不確定你最近沒有它。作爲參考,您可以爲每個ruby虛擬機添加捆綁器到您的全局gemset,然後每個虛擬機只安裝一次。 – 2011-04-29 01:31:30

+0

如果你更深入地解釋Bundler的功能,以及如何補充或與RVM的gemsets作戰,這將對我有所幫助。 – Phrogz 2011-04-29 01:50:24

+0

@Phrogz,[基本原理](http://gembundler.com/rationale.html)頁面是一個很好的概述。我認爲它對於生產代碼非常方便,特別是當它需要在多臺機器上時。與傳統上我不必管理所有寶石相比,Gemfile和bundler會一直這樣做,只是它適用於Rails應用程序。我不在工作中使用Rails,但是生成實用程序腳本,所以這會很好地工作。 – 2011-04-29 07:14:08

2

捆綁器代碼中的管理依賴的工具 - 即,所有它需要的寶石。它將確保您在Gemfile中指定的所有寶石以及任何依賴項都安裝在您的系統上。它並不關心你使用的是哪個版本的ruby,它只是在使用哪個解釋器的情況下爲你安裝寶石。

RVM是運行多個紅寶石的工具,從理論上講,多gemsets爲好。它根本不處理依賴關係 - 安裝這些gem仍然取決於你。

我的經驗(我是RVM的新手)是,除非你需要運行多個ruby,或者需要爲不同的項目安裝gem,否則它們之間會產生衝突,所以你不想打擾RVM 。即使你使用的是RVM,使用Bundler來管理gem依賴也是有意義的,這樣你的Gemfile可以在你使用的任何代碼庫中進行跟蹤。

+1

即使您只運行一個版本的ruby,RVM也可以非常方便地檢查您要推向世界的代碼的依賴關係。開發依賴於寶石將是一個很好的例子,從發佈之前的測試中受益。 – 2011-04-29 11:24:04

+0

是的,這是一個很好的觀點,我會牢記這一點。 – muffinista 2011-04-29 15:38:47

3

RVM更像是一個收容單元。雖然Bundler就像應用程序在生命週期中需要或使用的清單(依賴管理器)(除其他外)。

如果你在Rails的工作,你將無法逃脫捆紮機。但是我一直都在使用它,所以我知道我需要什麼寶石,其他人以後也會參與這個項目。

RVM幫助我單獨拿出我的紅寶石,然後再進入紅寶石/項目。這樣我就沒有一堆寶石和不同的版本。

不完全是最動態的答案,但希望它有一點幫助。

3

直接回答你的問題......

是什麼捆紮機做RVM不 不是?

Bunlder將安裝項目所需的所有寶石(使用捆綁器,並在Gemfile中指定所有需要的寶石)。 RVM不會這樣做。

使用Gemfile中,你可以指定哪些寶石組(即:開發,測試)...

還有像這些是捆綁做,但RVM沒有很多「小」事。一般來說,正如上面的好人所解釋的那樣,RVM與bundler有着不同的目標。有關管理ruby運行時的RVM,而bundler則是關於管理應用程序的相關gem。

相關問題