2013-04-18 3 views
28

Ich muss sicherstellen, dass einige meiner Edelsteine ​​aus unserem eigenen Edelstein Repository statt Rubygems installiert sind, während der Rest von Rubygems installiert sind. Kann ich das in der Gemfile einrichten, ohne sich Gedanken über einen Namenskonflikt mit einem gleichnamigen Juwel in Rubygems machen zu müssen? Wie kann ich feststellen, woher der Edelstein heruntergeladen wurde?Ruby Bundler mehrere Quellen in Gemfile

zB Gemfile:

source :rubygems 
gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

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

Antwort

4

Der einzige Weg, ich scheint wie eine schreckliche Hack gefunden.

Bundler sucht ab der zuletzt aufgelisteten Quelle nach der besten Version Ihres Gems und durchsucht dann alle zuvor aufgelisteten Quellen. Es spielt keine Rolle, wo die Quelllinien relativ zu den Edelsteinlinien sind, nur relativ zueinander.

Ich habe versucht, es funktioniert mit: Git und: Pfad, aber keiner von denen für Gemserver arbeiten. Das passt zur besten Version.

Wenn Sie die Version Ihres Gems auf etwas wie 2.mine.1 setzen und diese auf Ihren Server übertragen, können Sie die Version in Ihrer Gemfile einschränken.

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

Dann sollte die am besten passende Version eine von Ihrem Server sein. Es besteht die Möglichkeit, dass jemand sein eigenes Juwel mit dem gleichen Namen mit 2.ourrepo.2 zu Rubygems schieben kann, aber das ist unwahrscheinlich, wenn es einzigartig ist.

+0

Ich mag diese Lösung, weil es Produktion von einer Produktionsversion des Edelsteins ziehen lässt, während ich in der Entwicklung von einer Entwicklungsversion des Edelsteins ziehen kann. – LisaD

5

Laut der Quelle Vorrangiger Abschnitt in den Gemfile manpage Quellen gesucht werden, von den letzten zuerst eingegeben eingegeben.

Basierend auf dem, was Sie gesagt haben, klingt es wie Sie möchten immer Ihr Juwel über rubygems.org bevorzugen. Solange Sie (dh einige dups von rubygems.org und einige dups von Ihrem privaten Repo.) Nicht Ihre Präferenz variieren müssen dann Ihr Problem einfach mit dem folgenden Gemfile gelöst:

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

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

Bündler 1.7 hat eine neue Funktion, die Sie die Quelle für bestimmte Edelsteine, indem sie nisten in einem Block auswählen können:

source "https://rubygems.org" 

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

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

oder Angabe es als Option:

source "https://rubygems.org" 

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

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

Details siehe http://bundler.io/v1.7/gemfile.html.