2013-04-18 6 views
28

Ho bisogno di assicurarmi che alcune delle mie gemme siano installate dal nostro repository gem piuttosto che da rubygems, mentre il resto viene installato da rubygems. Posso impostarlo nel Gemfile senza preoccuparmi di un conflitto di denominazione con una gemma identicamente denominata in Rubygems? Come posso determinare da dove viene scaricato il gioiello?Ruby Bundler multiple fonti in Gemfile

esempio Gemfile:

source :rubygems 
gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

source "http://our.own.gem.repo.com/the/path/to/it" 
gem 'gemfromourrepo' 

risposta

4

L'unico modo che ho trovato sembra un hack orribile.

Bundler cercherà la migliore versione del tuo gioiello partendo dalla fonte elencata per ultima e quindi cercando tutte le fonti elencate in precedenza. Non ha importanza dove le linee di origine sono relative alle gemme, ma solo l'una rispetto all'altra.

Ho provato a farlo funzionare utilizzando: git e: percorso, ma nessuno dei due funziona per i server gem. Ciò lascia corrispondere la versione migliore.

Se si imposta la versione della gemma su qualcosa come 2.mine.1 e la si spinge sul server, è possibile vincolare la versione nel Gemfile.

source :rubygems 
source 'http://myrepo'  
gem 'gemfromourrepo', '~> 2.ourrepo' 

Quindi la migliore versione di corrispondenza dovrebbe essere una dal server. C'è una possibilità che qualcuno possa spingere la propria gemma omonima con 2.ourrepo.2 a rubygems, ma questo è improbabile se è unico.

+0

Mi piace questa soluzione perché consente di estrarre la produzione da una versione di produzione della gemma, mentre in fase di sviluppo posso trarre da una versione di sviluppo della gemma. – LisaD

5

Secondo la sezione Origine priorità nella Gemfile manpage fonti vengono cercati da ultimo entrato a inserito prima.

Sulla base di quello che hai detto, sembra che tu preferisca sempre la tua gemma su rubygems.org. Finché non c'è bisogno di variare la vostra preferenza (cioè alcune dups da rubygems.org e alcuni dups dal vostro repo privata.) Allora il vostro problema è risolto semplicemente con il seguente Gemfile:

source 'https://rubygems.org' 
source 'http://our.own.gem.repo.com/the/path/to/it' 

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 
gem 'gemfromourrepo' 
44

Bundler 1.7 ha un nuovo funzione che consente di selezionare la fonte per le gemme specifici da loro nidificazione in un blocco:

source "https://rubygems.org" 

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

source "http://our.own.gem.repo.com/the/path/to/it" do 
    gem 'gemfromourrepo' 
end 

o specificandolo come opzione:

source "https://rubygems.org" 

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

gem 'gemfromourrepo', source: "http://our.own.gem.repo.com/the/path/to/it" 

Vedi http://bundler.io/v1.7/gemfile.html per i dettagli.