webentwicklung-frage-antwort-db.com.de

Ruby Gemspec-Abhängigkeit: Ist eine Git-Verzweigungsabhängigkeit möglich?

Ist es möglich, eine Git-Zweigabhängigkeit innerhalb von mygem.gemspec zu haben?

Ich denke etwas Ähnliches wie das Folgende:

gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git'

... aber es geht nicht.

77
BBJ3

Dies ist nicht möglich und wird es wahrscheinlich auch nicht sein, da RubyGems es ziemlich schwer haben würde, Edelsteinentwicklern die Anforderung zu stellen, dass Benutzer ein bestimmtes Versionskontrollsystem installiert haben, um auf einen Edelstein zuzugreifen. Edelsteine ​​sollten mit einer minimalen Anzahl von Abhängigkeiten in sich abgeschlossen sein, damit die Benutzer sie in einer möglichst breiten Palette von Anwendungen verwenden können.

Wenn Sie dies für Ihre eigenen internen Projekte tun möchten, wäre mein Vorschlag Bundler zu verwenden, was dies recht gut unterstützt.

40
gtd

[~ # ~] edit [~ # ~]

Laut einem Kommentator stimmt dies nicht mehr. Vorherige Informationen bleiben für den historischen Kontext erhalten.

Das Duplizieren des Verweises auf einen Edelstein in Gemfile und .gemspec scheint nun eine Warnmeldung in Bundler auszulösen, sodass diese Antwort nicht mehr wahr zu sein scheint.

Veraltete Informationen

This Artikel von Yehuda Katz klärte ähnliche Verwirrung für mich auf. Es heißt, dass es nur zur Verwendung in der Entwicklung am besten ist, das Git-Zeug in die Gemdatei einzufügen, der Bundler jedoch weiterhin die Abhängigkeits-/Versionsinformationen aus der Gemspezifikation verwendet (scheint mir magisch, aber ich vertraue Yehuda).

12
tehgeekmeister

Ich habe nur versucht, dieses Problem auch herauszufinden. Und ich habe mir gerade die folgende Lösung ausgedacht (bei der ich nicht sicher bin, ob Sie Ihr Juwel veröffentlichen oder das Recht haben, dieses oauth2-Juwel weiterzugeben).

In Ihrem Edelstein, der oauth2 Edelstein erfordert, lassen Sie dieses laufen.

git submodule add [email protected]:lgs/oauth2.git lib/oauth2

Wenn Sie einen anderen Zweig als den Standardzweig benötigen

cd lib/oauth2 && git checkout <branchname_or_ref>
cd .. && git add lib/oauth2
git commit -m "adding outh2 submodule"

Fügen Sie dies in Ihrer Gemspezifikation über der erforderlichen Versionszeile hinzu

$:.Push File.expand_path('../lib/oauth2/lib', __FILE__)

Außerdem müssen Sie alle Laufzeitabhängigkeiten des oauth2-Gems zu Ihrer Gemspec hinzufügen. Ich habe noch keinen Ausweg gefunden.

Dies ist, was ich getan habe, und es funktioniert für uns, weil unser Edelstein über Git benötigt wird, so dass ich nicht sicher bin, ob dies für einen von Rubygems veröffentlichten Edelstein funktionieren würde.

6
kwbock