Was ist der Unterschied zwischen Gemfile und Gemfile.lock in Ruby on Rails
Ich bin ein Anfänger, Ruby on Rails, und ich bin mit Rails 3.0.9.
Was ist der Unterschied zwischen Gemfile
und Gemfile.lock
in Rails?
InformationsquelleAutor der Frage Shamith c | 2011-08-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
Gemfile
ist, wo Sie festlegen, welche Edelsteine, die Sie verwenden möchten, und können Sie angeben, welche Versionen.Den
Gemfile.lock
- Datei ist, wo Bundler zeichnet die exakten Versionen, die installiert wurden. Diese Weise, wenn die gleiche Bibliothek/Projekt geladen, auf einem anderen Computer ausgeführtbundle install
Blick auf dasGemfile.lock
und installieren Sie die exakt gleichen Versionen, eher als nur mit derGemfile
und die Installation der neuesten Versionen. (Mit verschiedenen Versionen auf verschiedenen Rechnern dazu führen könnten, gebrochen, tests, etc.) Sie sollten nicht immer direkt Bearbeiten Sie die lock-Datei.Check-out Bundler Zweck und Begründunginsbesondere die Überprüfung Ihres Codes in Version-Control-Bereich.
InformationsquelleAutor der Antwort Dylan Markow
In der Regel schreiben wir Abhängigkeiten im Gemfile:
Hier, dass Sie im Grunde sagen: "ich will nokogiri, solange es ist größer als die version 1.4.4", etc. Nehmen wir nun an, ich habe meine
Gemfile
8 Monaten und ich erfolgreich meine setup-app mit dieser Anforderung. Vor 8 Monaten nokogiri version war 1.4.4. Meine rails-apps lief perfekt ohne irgendwelche Probleme mit dieser version.Jetzt denken, ich bin versucht zu bauen mit der gleichen
Gemfile
. Aber wenn wir uns anschauen, nokogiri-Versionen wir sehen, dass die aktuelle stable-version geändert hat, um 1.4.9. Das bedeutet, dass, wenn wir versuchen, zu bauen, bundler installieren version 1.4.9 von nokogiri (nehmen wir an, wir haben nichtGemfile.lock
).Was bedeutet es ?
Wie Sie sehen, wenn Sie haben noch keine
Gemfile.lock
und ausführen:dann die derzeit verwendeten Edelsteine können unterschiedlich sein, zu jeder Zeit. Ihre app verwendet die version 1.4.4 und es funktioniert 8 Monaten ohne Probleme, aber wenn Sie versuchen, es zu bauen jetztbekommen Sie die version 1.4.9. Vielleicht ist es kaputt mit der neuesten version von
nokogiri
die tolle Funktion, die Sie verwendet, mit 1.4.4 ist nicht mehr verfügbar, etc..Um zu verhindern, dass diese Art von problem
Gemfile.lock
verwendet wird. InGemfile.lock
nur die genauen Versionen geschrieben sind, und somit nur diese installiert werden. Das heißt, wenn Sie verteilen Ihre app mit einemGemfile.lock
jede Maschine wird die gleichen gems installiert und wichtigste Sie alle bekommen die gleiche version. Diese geben Ihnen einen stabilen und gemeinsamen deployment-stack.Wie ist Gemfile.lock erstellt?
Es ist automatisch erstellt, mit dem ersten:
Befehl. Nach, dass jedes mal, wenn Sie laufen
bundle install
-, bundle-zunächst bisGemfile.lock
und installieren Sie die Edelsteine dort angegeben. Es ist eine Gewohnheit, verteilen Sie diese Datei unter Ihrer Projekte zu bieten, konsequent und Stabilität.Wie update Gemfile.lock?
Wenn Sie glücklich sind, mit dem Sie die neueste version Ihres apps als können Sie aktualisieren
Gemfile.lock
. Nur spiegeln Ihre änderungen zuGemfile
. Das bedeutet, ändern sich die Abhängigkeiten der neue exakt die Versionen inGemfile
. Danach ausführen:Aktualisieren Sie
Gemfile.lock
mit Ihrem neuesten version von apps.InformationsquelleAutor der Antwort Fatih Arslan
Dem Gemfile.lock
Beim ausführen bundle installieren, Bundler wird anhalten, den vollen Namen und Versionen aller Edelsteine, die Sie verwendet werden (einschließlich der Abhängigkeiten zu den Edelsteinen, angegeben in der Gemfile(5)) in eine Datei namens Gemfile.lock.
Bundler verwendet diese Datei auch in alle nachfolgenden Aufrufe an das bundle zu installieren, die garantiert, dass Sie immer die exakt gleiche code, auch als Ihre Anwendung bewegt sich über Maschinen.
Aufgrund der Art und Weise der Auflösung von Abhängigkeiten funktioniert, auch eine scheinbar kleine änderung (zum Beispiel, ein update, ein Punkt-release von einer Abhängigkeit von einem Juwel in Ihrem Gemfile(5)) führen können radikal verschiedene Edelsteine, die benötigt wird, um alle Abhängigkeiten.
Als Ergebnis, Sie SOLLTEN überprüfen, Ihre Gemfile.lock-in version control. Wenn Sie nicht tun, jede Maschine, die überprüft, aus Ihrem repository (einschließlich Ihrer Produktions-server) aufgelöst wird, sind alle Abhängigkeiten wieder, die in verschiedenen Versionen von Drittanbieter-code, der verwendet wird, wenn einer der Steine in das Gemfile(5) bzw. deren Abhängigkeiten geändert wurden.
InformationsquelleAutor der Antwort Ajey