Ich habe ein Juwel, an dem ich lokal arbeite, das von einem Projekt verwendet wird.
Wenn ich den Speicherort des Edelsteins mit path
in der angeben, kann ich eine Änderung vornehmen und das Projekt nimmt den neuen Code auf:
Wenn ich jedoch nach Heroku schiebe, schlägt die Bündelung fehl, weil Heroku nicht auf die Edelsteinquelle auf meinem lokalen Rechner zugreifen kann.
So kann ich die Edelsteinquelle zu einem entfernten Repo schieben und dort die Edelsteinquelle zeigen:
%Vor%Allerdings muss ich nun Änderungen an diesem Repo vornehmen und dann den Edelstein aktualisieren, um die neuen Änderungen in meinem Projekt zu erhalten:
%Vor%Ich kann dies etwas weniger schmerzhaft machen, indem ich eine lokale Überschreibung auf meinen lokalen Repo setze:
%Vor% Aber ich muss immer noch geänderte Dateien zu git, commit und $ gem update example
hinzufügen, wenn ich die Edelsteinquelle ändere, wenn ich neue Änderungen in meinem Projekt haben möchte.
Gibt es eine Möglichkeit, dass mein Projekt lokale Änderungen automatisch übernimmt (wie bei Verwendung von path
), aber das Remote-Repo immer noch in der Produktion verwendet?
Via Gemfile,
%Vor%... oder, verwende einen relativen Pfad zum Edelstein und vergewissere dich, dass Heroku den Edelstein am selben Ort sieht,
%Vor% ... oder, versuche mit --deployment
flag in Bundler Ссылка zu spielen, es sollte dein Juwel bündeln Quellen mit der App, die Sie dann in die git Ihrer App Commit so theoretisch Heroku sollte dann die lokale Kopie verwenden und nicht git verwenden, um die Edelstein-Quellen zu holen (ich sagen in der Theorie, weil Heroku hat seine eigenen Macken)
Ссылка sagt
Mit Bundler können Sie auch lokal gegen ein Git-Repository arbeiten anstatt die Remote-Version zu verwenden. Dies kann durch Einstellen erreicht werden up eine lokale Überschreibung:
bundle config local.GEM_NAME /path/to/local/git/repository
Um beispielsweise ein lokales Rack-Repository zu verwenden, könnte ein Entwickler dies tun Anruf:
bundle config local.rack ~/Work/git/rack
Jetzt statt auschecken Im Remote-Git-Repository wird die lokale Überschreibung verwendet. Ähnlich zu Eine Pfadquelle ändert sich jedes Mal, wenn sich das lokale Git-Repository ändert wird automatisch von Bundler abgeholt. Dies bedeutet ein Commit in der local git repo aktualisiert die Revision in Gemfile.lock auf die lokale git Repo Revision. Dies erfordert die gleiche Aufmerksamkeit wie Git Submodule. Bevor Sie zur Fernbedienung gehen, müssen Sie sicherstellen, dass es sich um ein lokales handelt Override wurde gedrückt, sonst könnten Sie nur auf ein Commit verweisen existiert in Ihrer lokalen Maschine.
Bundler führt viele Prüfungen durch, um sicherzustellen, dass ein Entwickler nicht mit invalid arbeitet Verweise. Insbesondere zwingen wir einen Entwickler, eine Verzweigung anzugeben die Gemfile, um diese Funktion zu verwenden. Wenn der Zweig in angegeben ist die Gemfile und der aktuelle Zweig im lokalen Git-Repository nicht Match wird Bundler abgebrochen. Dies stellt sicher, dass ein Entwickler immer vorhanden ist Arbeiten gegen die richtigen Zweige und verhindert versehentliches Sperren zu einem anderen Zweig. Schließlich stellt Bundler auch sicher, dass die Die aktuelle Revision in Gemfile.lock existiert im lokalen Git Repository. Dadurch zwingt Bundler Sie, das Neueste zu holen Änderungen an den Fernbedienungen.
Wie von @ bbozo erwähnt, können Sie bei der Verwendung eines Git-Repositorys in Ihrer gemfile lokale Überschreibungen für die Entwicklung bündeln , die Revisions-Hashes in deinem Gemfile.lock speichern. Bei der Produktion werden diese exakten Revisions-Hashes ausgecheckt, wenn Bundle Install ausgeführt wird.
Gemfile:
gem 'example', git: 'https://github.com/your_name/example.git', branch: :master
Kommando shell bündeln:
bundle config local.example /path/to/local/git/repository
Gemfile.lock (automatisch generiert):
GIT
remote: https://github.com/your_name/example.git
revision: b9270e61abb89e1ff77fb8cfacb463e4d04388ad
branch: master
Beachten Sie, dass Sie nach der Festschreibung im git-Repository "example" die Paketinstallation in Ihrer Hauptanwendung ausführen müssen, damit Gemfile.lock neu erstellt wird, um den neuen Revisions-Hash aufzunehmen. Ich empfehle den folgenden Edelstein zu verwenden, da er diesen Prozess für Sie automatisiert und auch in anderen Szenarien hilft. Sehen Sie die Edelstein Seite für genaue Details:
Tags und Links ruby ruby-on-rails gem bundle gemfile