2013-11-21 2 views
13

Ist es zulässig, alte Migrationsdateien in einer Rails App zu löschen (oder zu archivieren), wenn das Schema stabil ist?Löschen alter Migrationsdateien in einer Rails App

Meine Migrationen sind zahlreich und ich vermute, dass es dort irgendwo ein Problem gibt, weil ich gelegentlich Probleme habe, die Datenbank auf Heroku zu migrieren.

+2

möglich Duplikat [Ist es eine gute Idee, alte Rails Migration Dateien zu bereinigen ?] (http://stackoverflow.com/questions/4248682/is-it-a-good-idea-to-purge-old-rails-migration-files) – brainimus

Antwort

18

Sie müssen Ihre alten Migrationsdateien in einer Rails-App nicht beibehalten, da Ihr Datenbankschema entweder in schema.rb oder in einer entsprechenden SQL-Datei erfasst werden muss, die zum Generieren Ihres Schemas verwendet werden kann.

Migrationen sind nicht die autorisierende Quelle für Ihr Datenbankschema. Diese Rolle gehört entweder zu db/schema.rb oder zu einer SQL-Datei, die Active Record durch Untersuchung der Datenbank generiert. Sie sind nicht zum Bearbeiten gedacht, sie repräsentieren nur den aktuellen Zustand der Datenbank.

Es besteht keine Notwendigkeit (und es ist fehleranfällig), eine neue Instanz einer App bereitzustellen, indem der gesamte Migrationsverlauf erneut wiedergegeben wird. Es ist viel einfacher und schneller, nur eine Beschreibung des aktuellen Schemas, das sich in schema.rb oder der SQL-Datei befindet, in die Datenbank zu laden.
Diese Datei sollte versioniert und in der Quellcodeverwaltung beibehalten werden.

Um die automatische Generierung von schema.rb einzurichten, ändern Sie config/application.rb durch die Einstellung , die wie folgt aussehen kann: ruby ​​oder: sql. Wenn: ruby ​​ausgewählt ist, wird das Schema in db/schema.rb gespeichert. Wenn: sql ausgewählt ist, wird das Schema im nativen SQL-Format Ihrer Datenbank ausgegeben.

+5

Dies ist absolut richtig. Eine Einschränkung: Migrationen können verwendet werden, um den _content_ der Datenbank und nicht die _structure_ zu beeinflussen. Zum Beispiel könnten Sie SQL haben, das Daten transformiert (vielleicht normalisieren, in Groß- oder Kleinbuchstaben umwandeln usw.). Eine andere Verwendung ist eine Bereinigungsaufgabe (alte Datensätze löschen, einen früheren logischen Fehler bei der Erstellung von Daten korrigieren usw.). Schließlich wird manchmal in 'seeds.db' gearbeitet, was bei Migrationen gemacht wird. Ob diese Verwendung von Migrationen * korrekt * ist, ist eine andere Frage - nur darauf hinweisen, dass Sie vorsichtig sein sollten. –

+0

Was sollte mit alten Migrationsdateien gemacht werden? Es fühlt sich nicht richtig an, sie einfach zu löschen. – wbeange

+1

Mit @TomHarrisonJr oben nur darin übereinstimmen, dass diese Dinge "manchmal in Migrationen getan werden sollten" - diese Arten von SQL-Einschränkungen, Trigger, gespeicherten Prozeduren usw. sollten sich nicht auf Migrationsdateien verlassen. Stattdessen sollte 'config.active_record.schema_format'' 'sql' '_OR_ sein, die' rake: db: setup' Aufgabe überschreiben, um nachfolgende SQL-Befehle auszuführen, die diese Art von Dingen definieren (das kann der aktive Datensatz/schema.rb nicht). Ich stimme allem zu, was ich gesagt habe :). – Todd

0

Sie können Ihre alten Migrationen löschen. Nachdem Sie dies getan haben, wenn Sie Ihre Anwendung einrichten müssen Sie ausführen:

rake db:schema:load 

Statt:

rake db:migrate