2013-04-18 9 views
28

Muszę zapewnić, że niektóre z moich klejnotów są instalowane z naszego własnego repozytorium klejnotów zamiast rubygemów, podczas gdy pozostałe są instalowane z rubygemów. Czy mogę ustawić to w Gemfile bez martwienia się o konflikt nazw z identycznie nazwanym klejnotem w Rubygems? Jak mogę ustalić, skąd pobrany jest klejnot?Ruby Bundler wiele źródeł w Gemfile

np Gemfile:

source :rubygems 
gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

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

Odpowiedz

4

Jedynym sposobem znalazłem wydaje się okropny hack.

Bundler wyszuka najlepszą wersję twojego klejnotu, zaczynając od źródła wymienionego jako ostatnie, a następnie przeszukując wszystkie wymienione wcześniej źródła. Nie ma znaczenia, gdzie linie źródłowe są względem linii klejnotów, tylko względem siebie.

Starałem się, aby działało, używając: git i: path, ale żadna z nich nie działa dla gemservers. To pasuje do najlepszej wersji.

Jeśli ustawisz wersję swojego klejnotu na coś podobnego do 2.gine.1 i przełączysz ją na swój serwer, możesz ograniczyć wersję do pliku Gemfile.

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

Następnie najlepiej dopasowana wersja powinna pochodzić z serwera. Jest szansa, że ​​ktoś może wypchnąć własny klejnot o tej samej nazwie z 2.ourrepo.2 do rubygemów, ale jest to mało prawdopodobne, jeśli jest unikatowe.

+0

Podoba mi się to rozwiązanie, ponieważ pozwala na produkcję z wersji produkcyjnej klejnotu, podczas gdy w rozwoju mogę pobrać z wersji rozwojowej klejnotu. – LisaD

5

Według sekcji Źródło priorytetem w źródłach Gemfile manpage są przeszukiwane od ostatnia weszła na pierwszy wszedł.

Na podstawie tego, co powiedziałeś, wygląda na to, że zawsze wolisz swój klejnot od rubygems.org. Dopóki nie trzeba zmieniać swoje preferencje (tj niektóre dups z rubygems.org i niektóre dups z prywatnym repo). Następnie Twój problem został rozwiązany po prostu z następujących 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 posiada nowy funkcja, która pozwala na wybór źródła dla poszczególnych klejnotów przez zagnieżdżanie ich w bloku:

source "https://rubygems.org" 

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

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

lub określając go jako opcja:

source "https://rubygems.org" 

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

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

Szczegółowe informacje można znaleźć w części: http://bundler.io/v1.7/gemfile.html.

Powiązane problemy