Ich bin ein bisschen neu in Bundler und den Dateien, die es generiert. Ich habe eine Kopie eines Git-Repos von GitHub, zu dem viele Leute beitragen, daher war ich überrascht, dass der Bundler eine Datei erstellt hat, die im Repo nicht vorhanden und nicht in der .gitignore
Liste enthalten war.
Da ich es gegabelt habe, weiß ich, dass das Hinzufügen zum Repo nichts für das Haupt-Repo kaputt macht, aber wenn ich eine Pull-Anfrage mache, wird es ein Problem verursachen?
Sollte Gemfile.lock
in das Repository aufgenommen werden?
git
version-control
bundler
aarona
quelle
quelle
Antworten:
Angenommen, Sie schreiben kein Rubygem, sollte sich Gemfile.lock in Ihrem Repository befinden. Es wird als Momentaufnahme aller benötigten Edelsteine und ihrer Abhängigkeiten verwendet. Auf diese Weise muss der Bundler nicht bei jeder Bereitstellung usw. alle Gem-Abhängigkeiten neu berechnen.
Aus dem Kommentar von cowboycoded unten:
Hier ist ein schöner Artikel, der erklärt, was die Sperrdatei ist.
quelle
Das eigentliche Problem tritt auf, wenn Sie an einer Open-Source-Rails-App arbeiten, für die ein konfigurierbarer Datenbankadapter erforderlich ist. Ich entwickle den Rails 3-Zweig von Fat Free CRM. Ich bevorzuge postgres, aber wir möchten, dass die Standarddatenbank mysql2 ist.
In diesem Fall muss
Gemfile.lock
immer noch mit dem Standardsatz von Edelsteinen eingecheckt werden, aber ich muss Änderungen ignorieren, die ich auf meinem Computer vorgenommen habe. Um dies zu erreichen, renne ich:und umzukehren:
Es ist auch nützlich, so etwas wie den folgenden Code in Ihren Code aufzunehmen
Gemfile
. Dadurch wird das entsprechende Datenbankadapter-Gem basierend auf Ihrer database.yml geladen.Ich kann nicht sagen, ob dies eine etablierte Best Practice ist oder nicht, aber es funktioniert gut für mich.
quelle
Meine Arbeitskollegen und ich haben unterschiedliche Gemfile.lock, da wir unterschiedliche Plattformen, Windows und Mac verwenden und unser Server Linux ist.
Wir beschließen, Gemfile.lock in Repo zu entfernen und Gemfile.lock.server in Git Repo zu erstellen, genau wie database.yml. Bevor wir es auf dem Server bereitstellen, kopieren wir Gemfile.lock.server mithilfe des Cap-Deployment-Hooks auf den Server nach Gemfile.lock
quelle
Wenn Sie mit r-dub einverstanden sind, behalten Sie die Quellcodeverwaltung bei, aber für mich ist der eigentliche Vorteil folgender:
Zusammenarbeit in identischen Umgebungen (ohne Berücksichtigung der Windohs und Linux / Mac-Inhalte). Vor Gemfile.lock könnte der nächste Typ, der das Projekt installiert, alle möglichen verwirrenden Fehler sehen und sich selbst die Schuld geben, aber er war nur der Glückliche, der die nächste Version von Super Gem bekam und bestehende Abhängigkeiten aufbrach.
Schlimmer noch, dies geschah auf den Servern und es wurde eine nicht getestete Version abgerufen, es sei denn, dies wurde diszipliniert und die genaue Version installiert. Gemfile.lock macht dies explizit und zeigt Ihnen explizit an, dass Ihre Versionen unterschiedlich sind.
Hinweis: Denken Sie daran, Dinge zu gruppieren, wie: Entwicklung und: Test
quelle
Die Bundler-Dokumente behandeln auch diese Frage:
ORIGINAL: http://gembundler.com/v1.3/rationale.html
BEARBEITEN: http://web.archive.org/web/20160309170442/http://bundler.io/v1.3/rationale.html
Siehe den Abschnitt "Einchecken Ihres Codes in die Versionskontrolle":
quelle
Kein Gemfile.lock bedeutet:
-> Checken Sie immer Gemfile.lock ein und lassen Sie Travis es löschen, wenn Sie besonders gründlich sein möchten. Https://grosser.it/2015/08/14/check-in-your-gemfile-lock/
quelle
Ein bisschen zu spät zur Party, aber die Antworten brauchten noch Zeit und ausländische Lesungen, um dieses Problem zu verstehen. Ich möchte also zusammenfassen, was ich über Gemfile.lock herausgefunden habe.
Wenn Sie eine Rails-App erstellen, verwenden Sie bestimmte Versionen von Edelsteinen auf Ihrem lokalen Computer. Wenn Sie Fehler im Produktionsmodus und in anderen Zweigen vermeiden möchten, müssen Sie diese eine Gemfile.lock-Datei überall verwenden und den Bundler anweisen
bundle
, Edelsteine bei jeder Änderung neu zu erstellen .Wenn
Gemfile.lock
sich auf Ihrer Produktionsmaschine etwas geändert hat und Git Sie nicht zulässtgit pull
, sollten Sie schreibengit reset --hard
, um diese Dateiänderung zu vermeiden, undgit pull
erneut schreiben .quelle