Sehr einfache Frage hier: Wenn Migrationen langsam und umständlich werden können, wenn eine App komplexer wird, und wenn wir rake db:schema:load
stattdessen viel sauberer anrufen können, warum gibt es überhaupt Migrationen?
Wenn die Antwort auf das oben Gesagte lautet, dass Migrationen für die Versionskontrolle verwendet werden (eine schrittweise Aufzeichnung von Änderungen an der Datenbank), rake db:schema:load
behalten sie dann ihre primäre Funktion bei , wenn eine App komplexer wird und stattdessen häufiger verwendet wird?
Vorsicht:
Aus den Antworten auf diese Frage: rake db:schema:load
Löscht Daten auf einem Produktionsserver. Seien Sie also vorsichtig, wenn Sie sie verwenden.
ruby-on-rails
ruby-on-rails-3
migration
sscirrus
quelle
quelle
Antworten:
Migrationen bieten Vorwärts- und Rückwärtsschrittänderungen an der Datenbank. In einer Produktionsumgebung müssen während der Bereitstellung inkrementelle Änderungen an der Datenbank vorgenommen werden: Migrationen bieten diese Funktionalität mit einem ausfallsicheren Rollback. Wenn Sie
rake db:schema:load
auf einem Produktionsserver ausgeführt werden, werden am Ende alle Ihre Produktionsdaten gelöscht. Dies ist eine gefährliche Angewohnheit.Abgesehen davon halte ich es für eine anständige Praxis, Migrationen gelegentlich "zusammenzubrechen". Dies beinhaltet das Löschen alter Migrationen, das Ersetzen durch eine einzelne Migration (sehr ähnlich zu Ihrer
schema.rb
Datei) und das Aktualisieren derschema_migrations
Tabelle, um diese Änderung widerzuspiegeln. Seien Sie dabei sehr vorsichtig! Sie können Ihre Produktionsdaten einfach löschen, wenn Sie nicht vorsichtig sind.Als Randnotiz bin ich der festen Überzeugung, dass Sie die Datenerstellung niemals in die Migrationsdateien aufnehmen sollten. Die
seed.rb
Datei kann hierfür oder für benutzerdefinierte Rake- oder Bereitstellungsaufgaben verwendet werden. Wenn Sie dies in Migrationsdateien einfügen, wird Ihre Datenbankschemaspezifikation mit Ihrer Datenspezifikation gemischt und es kann zu Konflikten beim Ausführen von Migrationsdateien kommen.quelle
db:schema:load
wenn sie versuchen,db:migrate
eine Neuinstallation durchzuführen . @ clear_migrationsIch bin gerade über diesen Beitrag gestolpert, der vor langer Zeit war und die Antwort, die ich erwartet hatte, nicht gesehen habe.
rake db:schema:load
ist großartig, wenn Sie zum ersten Mal ein System in Produktion nehmen. Danach sollten Sie Migrationen normal ausführen.Dies hilft Ihnen auch dabei, Ihre Migrationen zu bereinigen, wann immer Sie möchten, da das Schema alle Informationen enthält, um andere Maschinen in Produktion zu bringen, selbst wenn Sie Ihre Migrationen bereinigt haben.
quelle
db:schema:load
hat, wenn man sich während des gesamten Entwicklungszyklus nur einmal einige Sekunden lang rasiert. Haben Sie jemals mit einer App gearbeitet, deren Aufbau länger als 30 Sekunden gedauert hat? Ich arbeite derzeit an einer App, deren Migrationsdateien Fehler enthalten, und die niemals migriert wird, ohne dass Fehler behoben oder ausgeführt werden. Diesdb:schema:load
lässt mich an Schema denken: Laden ist für den Fall gedacht, dass bei der Entwicklung der App etwas schief gelaufen ist.instead of editing schema.rb, please use the migrations feature
. Wenn Sie alsodb:schema:load
eine automatisch generierte Datei ausführen, für die keine Migrationen erneut automatisch generiert werden müssen, können Sie das Schema effektiv manuell "bearbeiten" und Migrationen nicht mehr verwenden. Ich wünschte, ich hätte ein Zitat aus der Rails-Anleitung dazu, aber sie diskutieren nicht schema: load, was meine Frustration bei der Entscheidung, wie ich mich der schema: load-Funktion nähern soll, entmutigend verstärkt. = /rake db:schema:load
im Gegensatz zu ausrake db:migrate
. Dann können Sie von da anrake db:migrate
.Mit Migrationen können Sie der Datenbank auch Daten hinzufügen. aber db: schema: load lädt nur das Schema.
quelle
Weil Migrationen zurückgesetzt werden können und zusätzliche Funktionen bieten. Wenn Sie beispielsweise einige Daten im Rahmen einer Schemaänderung ändern müssen, müssen Sie dies als Migration tun.
quelle
Als Benutzer anderer ORMs kam es mir immer seltsam vor, dass Rails keine Funktion zum Synchronisieren und Aktualisieren hatte. Verwenden Sie also die Schemadatei (die das gesamte aktuelle Schema darstellt), gehen Sie die vorhandene DB-Struktur durch und fügen Sie nach Bedarf Tabellen, Spalten und Indizes hinzu bzw. entfernen Sie sie.
Für mich wäre das viel robuster, wenn auch möglicherweise etwas langsamer.
quelle
schema
der Master und nicht die Migrationen sind.Ich habe bereits als Kommentar gepostet, halte es jedoch für besser, die Kommentare der Datei db / schema.rb hier abzulegen:
Ich habe die Erfahrung gemacht, dass es besser ist, die Migrationsdateien in git und nicht in die Datei schema.rb zu legen ...
quelle
rake db:migrate
Richten Sie die Tabellen in der Datenbank ein. Wenn Sie den Migrationsbefehl ausführen, sucht er in db / migrate / nach Ruby-Dateien und führt sie beginnend mit der ältesten aus. Am Anfang jedes Migrationsdateinamens befindet sich ein Zeitstempel.Im Gegensatz dazu werden
rake db:migrate
Migrationen ausgeführt, die noch nicht ausgeführt wurden.rake db:schema:load
Lädt das bereits generierte Schemadb/schema.rb
in die Datenbank.Weitere Informationen zu Rake-Datenbankbefehlen finden Sie hier .
quelle