2011-07-31 289 views
1

關於寶石安裝的快速問題 - 當我使用bundle install我知道它安裝我個人項目所需的寶石,但它不會影響我的電腦上的其他項目。如果我使用gem install name_of_gem那也只會影響當前項目,還是會影響我的計算機上使用rails(通用安裝)的所有項目?總的來說,我認爲我對gem安裝的工作原理有些困惑,所以如果你的答案可能包含一些一般背景信息來幫助我理解這將是非常棒的!導軌 - 寶石安裝

回答

1

是的,寶石通常安裝在系統範圍內,或者在您的主​​目錄下,這是不可能的。默認情況下,當您的應用程序使用gem時,RubyGems會加載最新安裝的版本。如果你想使用一個特定的版本RubyGems的讓你做與此語法:

require 'rubygems' 
gem 'RedCloth', '3.0' 

捆紮機是一個有用的工具,它跟蹤正在使用的開發項目寶石,的版本,然後讓你要一起安裝它們與bundle install,並加載這些確切的版本。應用程序通過加載Bundler代碼加載它們,該代碼覆蓋部分RubyGems以使用Gemfile中指定的版本。

默認情況下,Bundler只是調用RubyGems來安裝gems(再次,系統範圍或在你的homedir中)。您可以通過使用bundle package將它存儲在一個名爲vendor/cache的目錄中。這可讓您「凍結」寶石,以便您可以將它們與源代碼一起分發。

如果你想進一步隔離你的Ruby環境,你應該使用RVM,它允許你設置獨立的gemset,事實上,不同版本的Ruby,可以用在不同的項目上。當您使用RVM時,RubyGems安裝事物的目錄將被覆蓋,並且特定於您當前的Ruby版本和gemset。

我建議閱讀RubyGemsBundler的文檔;他們都很好。

1

當你捆綁安裝寶石安裝在RubyGems的,除非你使用RVM併爲您的項目設置gemsets將可用於所有的項目。

當你不使用RVM和你做一個寶石安裝您的操作系統可能會在當前用戶的文件(通常〜/ .gem)安裝寶石,如果你sudo的安裝寶石它將安裝在您的系統Ruby安裝位置。

我真的會推薦你設置RVM來管理不同組的寶石和紅寶石。您可以閱讀上面鏈接的網站或a simple tutorial I wrote to use it

+0

所以在我的情況下,一個項目使用Rake 0.9.2,我想切換到Rake 0.8.7。但是,我想保留在Rake 0.9.2中的第二個項目。如果我只是使用'gem uninstall rake -v = 0.9.2',然後使用'bundle update'在我指定rake 0.8.7的包中,這是否也會影響我的第二個依賴於rake 0.9.2的項目?如果是的話,我該如何解決這個問題? – Kvass

+0

@Kvass:對於這種情況,RVM是一個不錯的選擇。如果你想,你可以在你的Gemfile中指定它,並使用'bundle exec rake'來代替(我相信這是有效的;沒有檢查過)。但是,Bundler用於依賴管理,而不是環境隔離。如果你想要後者,你應該使用RVM。幸運的是,RVM和Bundler一起工作得很好。 –

+0

rvm在Windows上工作/我可以在哪裏找到使用它的Windows指南? – Kvass