2012-03-15 99 views
2

從github直接安裝gems(:git => 'whatever')時,我有一個有趣的錯誤。Bundler和隱藏的寶石

首先,當我刪除所有的寶石和運行捆綁安裝命令,我得到如下:

 
Installing gem1 
Installing gem2 
Using gem3 (the one from github) 

然後當我要檢查使用寶石,我已經得到了我所看到的下面名單

 
gem1 (x.x.x) 
gem2 (y.y.y) 

沒有gem3 ......現在,仔細一看文件系統,我看到以下內容:

 
ls -l ~/.rvm/gems/ruby-1.9.3-p125/gems 
gem1 
gem2 

那麼寶石3在哪裏?不是我很期待它是:

 
ls -l ~/.rvm/gems/ruby-1.9.3-p125/bundler/gems 
gem3-213213213 

如此這般下打捆/寶石和不寶石列表可見...和Capistrano的部署,這給了我如下:

 
git://github.com/author/gem3.git (at master) is not checked out. Please run `bundle install` 

我更擔心Capistrano無法部署......任何人有任何線索?

+0

您是否在部署時未運行'bundle install'? – 2012-03-15 04:43:07

+0

是的,我在部署期間運行軟件包安裝。爲了調試目的,我刪除了所有gem並直接運行bundle install。 – alexs333 2012-03-15 04:48:23

回答

1

Bundler從您系統上的各種來源獲取它的寶石。只要它們是正確的版本,就會將它們拉入。

部署時,它具有更嚴格/保守的行爲。

bundle help install,在部分約部署模式,它是用來指定--deployment標誌時:

寶石被安裝到供應商/捆不是默認的系統失水01​​重刑

在開發過程中,將 應用程序中使用的寶石與 系統上運行的其他應用程序和其他腳本共享是很方便的。

在部署中,隔離是一個更重要的默認設置。另外,部署應用程序的用戶可能沒有 將安全寶石安裝到系統的權限,或者Web服務器可能沒有權限讀取它們。

因此,bundle install --deployment會將gem安裝到應用程序中的ven/ dor/bundle目錄中。使用--path選項可能會覆蓋 。

+0

我想我是通過試圖讓系統使用系統級的寶石來戰勝失敗的戰鬥。你的解決方案使用部署標誌,所以我會堅持下去!謝謝。 – alexs333 2012-03-16 08:41:17