2013-10-16 10 views
7

Ich habe mehrere Zweige auf Git, das Schema über diese Zweige sind in verschiedenen Versionen. Nach dem Wechsel zu einem Zweig sagen wir new_feature (mit ausstehender Migration), wenn ich tun rake db:setup dann rate mir, die ausstehende Migration auszuführen.Rake db: migrieren Aktualisierung Schema.rb mit gelöschten Tabellen

Sobald ich das mache, wird mein Schema aktualisiert mit Tabellen, die in der gleichen Branche gelöscht wurden.

Wenn ich rake db:reset mache, dann funktioniert es gut.

Ich kenne den Unterschied zwischen db:setup und db:reset. Je später man tut db:drop und dann db:setup

Aber frage mich, warum das Schema diejenigen Tabellen auf rake db:migrate

bin sicher, einige Schienen Wissen w.r.t. fehle gesunken zeigt sich Schema Laden und Migrationsprozess

Alle Einsichten wären von großer Hilfe. Vielen Dank im Voraus

Antwort

5

Es klingt wie Ihre schema.rb ist in git überprüft, was eine gute Sache ist. Wenn Sie also Zweige wechseln, unterscheidet sich Ihr Schema.rb von Ihrem tatsächlichen Datenbankschema.

Rake db: migrate überprüft nur die Schemaversion im Schema.rb und wenn die Datenbankversion jünger ist dann wird es alle "ausstehenden" Migrationen ausführen. Es generiert nur die Datei schema.rb neu, wenn eine Migration ausgeführt wird.

In dem Fall, in dem Ihr aktuelles Schema eine höhere Version hat als die im Schema.rb gemeldete Version, macht es die einzige sichere Sache, die nichts ist. Die Begründung ist, dass es möglicherweise keine Migrationsdatei gibt, um sie auf den neuesten Stand zu bringen, oder dass die Datenbankoperationen das erneute Erstellen der Tabelle/truncate oder etwas Ähnliches erzwingen können. Es gibt andere Randfälle von nicht übereinstimmenden Versionen, aber ich denke, dass Sie die Idee bekommen.

Sie haben also ein paar Optionen in der Migrationsmentalität zu arbeiten, wenn Sie die Daten zwischen Zweigen behalten wollen.

A) Alle Daten, die Sie zwischen Zweigen benötigen, werden in der db-Seeds-Datei gespeichert. Dann können Sie Ihre db ohne Bedenken löschen/erstellen

B) Vor dem Wechsel Zweige zurückrollen die Migrationen, die unterschiedlich sind. Im neuen Zweig rollst du sie wieder vorwärts.

C) Cheat, und löschen Sie die schema.rb und führen Sie Rake db: migrate erneut. Dies ist Betrug, weil es leicht zu Datenverlust führen kann, inkonsistente Schema.rb in Ihrer Versionskontrolle und Kopfschmerzen für andere Teammitglieder, weil Ihre Migrationen keinen Sinn ergeben.

Und ein Wort des Rates. Wenn Sie es an git übergeben haben, ändern Sie keine alte Migrationsdatei. mach einfach einen neuen. Sie bilden einen logischen Stack und sollen Ihr Schema sequentiell verändern.