2009-04-01 3 views
15

Eine Schiene App, die ich derzeit entwickle, hat bis zu diesem Zeitpunkt etwa 35 Migrationen. Da die Anwendung als ein Experiment begann, gibt es eine Menge sinnloser Abwechslung in den Migrationen, als ich zwischen verschiedenen Ideen hin und her ging.Ist es eine gute Idee, alte Schienen Migrationen zu reduzieren?

Gibt es irgendwelche Nachteile beim Zusammenbruch der Migrationen 1-35 in eine Migration? Ich plante, dies zu tun, indem ich bei der ersten Migration das Schema wie es jetzt ist laden und alle vorherigen Migrationen löschen würde.

Ich bin derzeit die einzige Person, die an diesem Projekt arbeitet, wenn das einen Unterschied macht.

Antwort

11

laufen Wenn Sie Ihren Code unter Quellcodeverwaltung (Sie tun haben Sie den Code unter Quellcodeverwaltung, nicht wahr ?) Dann würde ich sagen, dass es keinen wirklichen Schaden gibt, vorausgesetzt, Sie akzeptieren, dass Rollback-Schemaänderungen entweder die Wiederherstellung alter Migrationen oder brandneuer Migrationen erfordern. Seien Sie sicher, dass Sie die Implikationen verstehen und akzeptieren, bevor Sie etwas in Stein gemeißelt haben.

Ihr aktuelles schema.rb kann die Grundlage für eine neue einzelne Migration bilden, die eine neue Gruppe startet.

Seien Sie gewarnt, wenn Sie Datenmanipulationsoperationen in Ihren vorhandenen Migrationen haben, zum Beispiel statische Daten laden und/oder mögliche nachfolgende Transformationen, dann müssen diese irgendwo behandelt werden. Es ist etwas, über das ich ein paar Mal gestolpert bin ...

5

Ich würde sie herum halten. Machen Sie sich keine Sorgen darüber, dass Sie jedes Mal, wenn ein neuer Entwickler das Projekt überprüft, viele Migrationen durchführen müssen. Er kann immer laufen

rake db:schema:load 

die viel schneller ist, statt

rake db:migrate 
2

Wenn all Ihre Migrationen Ihre Tabellenstrukturen ändern, würde ich mir darüber keine Sorgen machen.

Bedenken Sie jedoch, dass einige Migrationen Daten hinzufügen - ich habe solche, die die Datenbank mit einem Administratorkonto und anderen festen Daten säen - und das Schema wird Ihnen dies nicht geben.

Beachten Sie, dass es eine schlechte Idee ist, das zu tun, was ich mit Migrationen mache, da ich die Migrationen in der Bereitstellung nicht verwende. Für eine Zeit, in der diese Datensaatmigrationen in separate Rake-Tasks verschoben werden, kann es daher sinnvoll sein, kollabierende Migrationen durchzuführen.

Auf Rückschau - ich habe bereits Echopunkte gemacht. rake db:migrate VERSION -1

[Ich beschuldige die ablenkende neue animierte Logo aus dem Text entfernt mein Auge Zeichnung]

5

Manchmal Modelle Migrationen verwenden, die nicht mehr Tabellen vorhanden sind oder erstellen und sie dann später zerstören, wertvolle CPU-Zeit zu verschwenden. Bestes, es zu kompilieren alle in db/schema.rb und erhalten Sie Ihre Entwickler rake db:schema:load

-1

Für diejenigen, die, wie ich zu laufen, diese Antwort auf der Suche nach einem Weg, um eine Anwendung zurückgesetzt in seinen ursprünglichen Zustand zurück gefunden , hier ist was zu tun ist:

rm db/migrations/* 
rake db:drop 
rake db:schmea:dump 

Dies ist nützlich, wenn Sie gerade haben eine App und beschlossen, begann man es von Grund auf neu erstellen möchten, ohne alle Ihre Dateien zu verlieren.

1

Kein Problem, und das Reduzieren von Migrationen ist eine gute Vorgehensweise und hilft bei der Ausführung von Migrationen, wenn Migrationen ausgeführt werden müssen. Dies ist jetzt Teil von Rails' schema.rb:

# Note that this schema.rb definition is the authoritative source for your 
# database schema. If you need to create the application database on another 
# system, you should be using db:schema:load, not running all the migrations 
# from scratch. The latter is a flawed and unsustainable approach (the more migrations 
# you'll amass, the slower it'll run and the greater likelihood for issues). 

Note als @ mike-Woodhouse sagt: „Seien Sie gewarnt, dass, wenn Sie Datenmanipulationsoperationen in Ihrer bestehenden Migrationen haben, statische Daten geladen werden, zum Beispiel, und/oder mögliche nachfolgende Transformationen, dann müssen diese irgendwo behandelt werden. "

Aber Sie sollten sowieso nichts davon bei Ihren Migrationen tun :) - Chad