2016-08-15 3 views
0

Ich habe kürzlich meine schema.rb-Datei angeschaut und war alarmiert festzustellen, dass bestimmte Spalten, die in meiner Datenbank vorhanden sind, nicht angezeigt werden und einige Tabellen vollständig fehlen. Die fehlenden Spalten wurden über "def change add_column" -Migrationen zur Datenbank hinzugefügt, obwohl einige Spalten, die auf diese Weise hinzugefügt wurden, in schema.rb wie erwartet angezeigt werden.Warum wird meine schema.rb-Datei nicht aktualisiert?

Bei näherer Betrachtung stellte ich fest, dass schema.rb seit der Erstellung der Tabelle Users nicht aktualisiert wurde.

20151019205241_create_users.rb:

class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 
     t.string :name 
     t.string :email 
     t.timestamps null: false 
    end 
    end 
end 

Das ist für mich nicht verursacht hat ein Problem in der Praxis, aber ich dachte schema.rb sollte automatisch aktualisiert gehalten werden, und dass es wichtig wäre, es zu haben aktualisiert um die Datenbank neu zu erstellen. Kann mir jemand helfen, herauszufinden, warum es nicht aktualisiert werden würde?

Eine Möglichkeit ist, dass es aufgehört hat, aktualisiert zu werden, wenn ich meine Datenbank von sqlite3 zu postgresql wechselte. Ich erinnere mich nicht genau, aber ich denke, das Timing macht Sinn.

+0

Nicht sicher, wie das Umschalten der Datenbank mit 'schema.rb' interferiert. Wird die Datei korrekt aktualisiert, wenn Sie jetzt eine 'Rake db: migrate' ausführen? (Sie müssen keine neuen Migrationen hinzufügen, damit diese Rake-Task erfolgreich ausgeführt werden kann.) – Raffael

+0

Dies ist nicht der Fall. Wenn ich das nächste Mal die Datenbank aktualisiere, werde ich das testen. Für jetzt @ Smmeju Lösung unten funktioniert. Danke für deine Antwort! Sie haben recht, es scheint nichts mit dem Wechsel der Datenbanken zu tun zu haben. –

Antwort

2

Sie können rake db:schema:dump verwenden, um die Datei aus der aktuellen Datenbankstruktur neu zu erstellen.

Die Schemadatei ist unabhängig vom Treiber, daher sollte die Migration von sqlite3 auf PostgreSQL keine Rolle spielen. Stellen Sie sicher, dass version für die Definition in der Datei nicht größer als das aktuelle Datum ist. Sie können auch die gesamte Datei zum Snippet der Frage hinzufügen.

+0

Danke, das hat es behoben! –

Verwandte Themen