Ist es möglich, eine git-Verzweigungsabhängigkeit in mygem.gemspec zu haben?
Ich denke etwas Ähnliches wie das Folgende:
gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git'
... aber es funktioniert nicht.
Ist es möglich, eine git-Verzweigungsabhängigkeit in mygem.gemspec zu haben?
Ich denke etwas Ähnliches wie das Folgende:
gem.add_runtime_dependency 'oauth2', :git => '[email protected]:lgs/oauth2.git'
... aber es funktioniert nicht.
Antworten:
Dies ist nicht möglich und wird es wahrscheinlich auch nie sein, da es für RubyGems ziemlich schwierig wäre, Gem-Entwicklern die Möglichkeit zu geben, von Benutzern die Installation eines bestimmten Versionskontrollsystems für den Zugriff auf ein Gem zu verlangen. Edelsteine sollten in sich geschlossen sein und eine minimale Anzahl von Abhängigkeiten aufweisen, damit die Benutzer sie in einem möglichst breiten Anwendungsbereich verwenden können.
Wenn Sie dies für Ihre eigenen internen Projekte tun möchten, würde ich vorschlagen, Bundler zu verwenden, der dies recht gut unterstützt.
quelle
BEARBEITEN
Laut einem Kommentator ist dies nicht mehr wahr. Vorherige Informationen für den historischen Kontext aufbewahrt.
Veraltete Informationen
Dieser Artikel von Yehuda Katz hat ähnliche Verwirrung für mich beseitigt. Es heißt, dass es für die Verwendung nur in der Entwicklung am besten ist, das Git-Zeug in die Gem-Datei einzufügen, aber dieser Bundler verwendet weiterhin die Abhängigkeits- / Versionsinformationen aus der Gem-Spezifikation (scheint mir magisch, aber ich vertraue Yehuda).
quelle
gemspec
dort eingeben, es auch aus der Gemspec liest. Wenn Sie also ausführenbundle install
, gehe ich davon aus (aber noch nicht getestet), dass Bundler das in der Gemfile angegebene Gem installiert. Da Bundler es bereits installiert hat, steht dieser Edelstein für den Edelstein zur Verfügungrequire
, unabhängig davon, dass er nicht aus einem Edelstein-Repository stammt. Keine Magie, nur Bundler arbeitet wie gewohnt.Ich habe nur versucht, dieses Problem auch herauszufinden. Und ich habe gerade die folgende Lösung gefunden (bei der ich nicht sicher bin, ob Sie Ihren Edelstein veröffentlichen oder das Recht haben, diesen Edelstein oauth2 weiterzugeben).
Führen Sie dies in Ihrem Edelstein aus, für den ein oauth2-Edelstein erforderlich ist.
Wenn Sie einen anderen Zweig als den Standardzweig benötigen
Fügen Sie dies in Ihrer Gemspec über Ihrer gewünschten Versionszeile hinzu
Außerdem müssen Sie alle Laufzeitabhängigkeiten des oauth2-Edelsteins zu Ihrer gemspec hinzufügen. Ich habe noch keinen Weg gefunden, dies zu umgehen.
Dies ist, was ich getan habe, und es funktioniert für uns, weil unser Edelstein über Git benötigt wird, daher bin ich mir nicht sicher, ob dies für einen von Rubygems veröffentlichten Edelstein funktionieren würde.
quelle
gem 'my_gem', git: '[email protected]:me/myrepo', submodules: true
Folgendes verwenden: in Ihrer Hostanwendung, wenn Sie von github installieren.Ich fand eine Problemumgehung ziemlich einfach:
Angenommen, Sie befinden sich in einem Projekt
P
und möchten das selbst erstellte Juwel verwenden,tools
das selbst ein Betriebssystem-Juwel verwendetoauth2
.Wenn Sie einen Patch
oauth2
in Ihrem Edelstein erstellt haben und diesen Patch in Ihrem Edelstein benötigen,tools
können Sie dieses Problem im Edelstein gemäß der akzeptierten Antwort nicht beheben .Sie können jedoch die gewünschte Version in der Gemfile Ihres
P
Projekts angeben. Dies ist die Version, dietools
zur Laufzeit verwendet wird:Hier ist ein Beispiel aus meinem wirklichen Leben.
quelle