Rails: Ich Migrationsdatei dann läuft db aktualisieren: wandern, aber mein Schema wird nicht aktualisiert
-
06-07-2019 - |
Frage
Ich versuche, ein zusätzliches Feld zu einem meiner Tabellen hinzuzufügen.
Ich habe das Feld in der Migrationsdatei (unter db \ Migrate) hinzugefügt, ‚Rake db: wandern‘ lief dann die ohne Probleme lief. Mein Text-Editor sagte mir sogar meine schema.db Datei aktualisiert wurde und aktualisieren muss.
Die Schemadatei enthält nicht mein neues Feld und alle Versuche, das Feld zu referenzieren von meinen Ansichten kläglich scheitern.
Wie mache ich das? Es ist möglich, eine Tabelle mit einem zusätzlichen Feld über Schienen zu aktualisieren, ohne Drop vollständig mit und erstellen Sie die Datenbank wieder?
Lösung
http://guides.rubyonrails.org/migrations.html#changing-existing-migrations
Gelegentlich werden Sie einen Fehler machen, wenn eine Migration zu schreiben. Wenn Sie bereits die Migration ausgeführt haben, dann können Sie nicht nur die Migration bearbeiten und die Migration erneut ausführen: Rails denkt, dass es bereits die Migration laufen und so wird sich nichts tun, wenn Sie rake db laufen: wandern. Sie müssen die Migration (zB mit
rake db:rollback
) Rollback, die Migration bearbeiten und führenrake db:migrate
die korrigierte Version ausgeführt werden.
Andere Tipps
Sie sollten immer eine neue Migrationsdatei erstellen, wenn / ändern etwas in der Datenbank hinzufügen. Dies ist der Zweck der Migration. Eine Migrationsdatei sollte die Möglichkeit haben, um die neue Änderung vornehmen und die Änderung rückgängig machen. Auf diese Weise, wenn etwas schief geht oder Sie Ihre Meinung geändert können Sie leicht zu einer vorherigen Migration rückgängig zu machen.
Die Abschnitte des folgenden Link mit der Bezeichnung ‚Anatomie einer Migration‘ und ‚Schreiben einer Migration‘ könnte Ihnen behilflich sein.
Gelöst meine eigene Frage ..
Im Grunde genommen, anstatt bearbeiten Sie die ursprünglichen Migrationsdateien generiert, wenn Sie Gerüsten führen Sie eine neue Migrationsdatei erstellen, für das, was Sie wollen acheive:
http://guides.rubyonrails.org/migrations.html # Erstellen von-a-Standalone-Migration
ich das gleiche tat, wollte ich einen Feldnamen ändern und statt dessen:
class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.string :commenter
t.text :body
# this line adds an integer column called `article_id`.
t.references :article, index: true
t.timestamps
end
end
end
I geändert
t.text :body
t.text :comment_body
Ich habe versucht, Rechen tun
db:migrate
nichts passiert, wie in es in die Eingabeaufforderung ging wieder ohne Ausgang ..., sah ich Stack-Überlauf und diese geführt ich Rake tun
db:migrate:redo
mit sich bringen
== 20141129044056 CreateComments: reverting ===================================
-- drop_table(:comments)
-> 0.0000s
== 20141129044056 CreateComments: reverted (0.0886s) ==========================
== 20141129044056 CreateComments: migrating ===================================
-- create_table(:comments)
-> 0.0040s
== 20141129044056 CreateComments: migrated (0.0040s) ==========================
und dann lud ich meine Seite / Controller mit commenter_body statt Körper und es geladen perfekt.
Ich denke, das ist auch eine Lösung für das gleiche. Ich weiß nicht, ob es eine Ausgabe in den darunter Arbeiten im Modell / DB (ich bin noch sehr neu zu RoR, mein dritte Tag tatsächlich ...)
Ich konnte mein Schema mit letzteren Migrationen regenerieren durch rake db:schema:dump
läuft
Sie wissen nicht, ob dies zutrifft, aber es ist einen Versuch wert. Gerade von " Agile Entwicklung mit Rails, 3. Auflage ":
Manchmal kann dies schema_migrations Tabelle Sie Probleme verursachen. Erstellen Sie zum Beispiel, wenn Sie die
Migration Quelldatei und führt db:migrate
, bevor Sie Schema-Definition von Anweisungen in die Datei hinzufügen,
Die Datenbank wird denken, es aktualisiert wurde, und die Schema-Info-Tabelle wird die neue Version enthält
Nummer.
Wenn Sie dann die vorhandene Migrationsdatei bearbeiten und ausführen db:migrate
wieder, Rails wissen nicht
übernehmen Sie die neuen Änderungen. Unter diesen Umständen ist es oft am einfachsten, die Datenbank zu löschen, neu erstellen
es, und erneut ausführen Migration (s).
Wenn u db tun Rake: wandern dann wieder u kann nicht hinzufügen Spalte zu diesem file.You haben eine neue Migrationsdatei zu generieren, indem Schienen g Migration add_columnname_to_tablename Verwendung für das Hinzufügen, dass bestimmte Spalte und Sie rake db: migrate.That ist es !! !