2011-09-01 62 views

回答

3

通過Gemfile,您可以確保任何其他開發人員也可以在您的應用上使用每個gem的相同版本。它還可以確保你沒有從Gemfile中的gem命令中放入不同的[the_gem]。

36

使用bundler而不是gem命令來直接安裝你的寶石給你一大堆好處。

在這種特定情況下,如果您建議使用gem命令安裝並稍後將其添加到Gemfile中,bundler將在您安裝gem時解析所有依賴項,否則您可能必須手動解析該gem。

給你舉個例子,我們採取以下依存關係:

sunspot_rails 
    nokogiri (>= 1.2.0) 

webrat 
    nokogiri (>= 1.3) 

兩個webrat和sunspot_rails寶石需要不同版本引入nokogiri作爲依賴。如果您只是使用gem命令來安裝它們,它可能會安裝nokogiri的兩個版本,或者更糟糕地抱怨版本衝突。 Bundler將足夠明智地解決這種依賴衝突並安裝正確的版本(比如說nokogiri 1.3),並且讓sunspot_rails和webrat都快樂!

對不起,很長的解釋。但是,希望你明白這一點! :)

而順便說一句,你應該看看這個文件Gemfile.lock看看什麼bundler在幕後爲你做。

2

一些寶石組合僅在特定環境中才有意義 - 例如,開發中有一定的分貝,生產中也有不同的分貝。

Gemfile是您的應用程序在每個環境中需要的記錄,並且bundle install正好安裝所需的內容,負責依賴關係。

如果您的Gemfile中的任何寶石已經安裝在您當前的gemset中(通過gem install),那麼捆綁器將使用它們(而不是重新安裝它們)。