wake-up-neo.net

Ich habe mein schema.rb verloren! Kann es regeneriert werden?

Aufgrund einiger Implementierungsprobleme wurde die Verfolgung von schema.rb in git beendet. Irgendwie habe ich das aufgestopft und irgendwo entlang meiner Datei schema.rb ist verschwunden.

Gibt es eine Möglichkeit, schema.rb aus der Datenbank oder aus den Migrationen zu regenerieren? Ich möchte die vorhandenen Daten nicht verlieren.

118
brad

Wenn Sie einen rake -T ausführen, werden alle möglichen Rake-Aufgaben für Ihr Rails-Projekt aufgelistet. Eine davon ist db: schema: dump , wodurch die schema.rb für die Rails-App aus der Datenbank erstellt wird.

bundle exec rake db:schema:dump
197
mguymon

Vorsichtig,

rake db:schema:dump

wird das aktuelle DB-Schema FROM der DB sichern. Das heißt, wenn Sie Änderungen an Ihren Migrationen vorgenommen haben, werden diese NICHT in der schema.rb-Datei widergespiegelt.

Wenn Sie das Schema aus den Migrationen neu erstellen möchten, führen Sie folgende Schritte aus:

rake db:drop  # ERASES THE DATABASE !!!! 
rake db:create
rake db:migrate
49
gamov
rake db:schema:dump

Ich denke, das ist in Rails 3 noch gültig - es regeneriert die schema.rb aus der Datenbank.

11
pschuegr

Schienen 5 Wege:

Rails db:schema:dump

oder wenn Sie Gem :: LoadError treffen, dann:

bundle exec Rails db:schema:dump

Hinweis:  

in Rails 5 wird empfohlen, die Task mit Rails anstelle von rake zu generieren/auszuführen. Dies ist nur zu beachten: Die von Rails generierte Task hat die Erweiterung .rake, siehe lib/tasks/myTask.rake. Dies bedeutet, dass diese Task auch ausgeführt werden kann, indem rake vorangestellt wird.

5
Kaleem Ullah

Wenn Sie schema.rb lokal regenerieren, sollten Sie in Ordnung sein. Es enthält lediglich eine Darstellung der Struktur Ihrer Datenbanktabellen. Die Daten selbst sind nicht in dieser Datei enthalten.

Um Ihre schema.rb-Datei neu zu generieren, führen Sie Folgendes aus:

bundle exec rake db:schema:dump

Dann legen Sie einfach die neue schema.rb-Datei fest und Sie sollten in gutem Zustand sein!

4
Graham Swan

Direkt aus der schema.rb-Datei selbst:

Wenn Sie die Anwendungsdatenbank auf einer anderen .__ erstellen müssen. System sollten Sie db:schema:load verwenden und nicht alle Migrationen ausführen von Grund auf neu. Letzteres ist ein fehlerhafter und nicht nachhaltiger Ansatz (je mehr Migrationen Sie anhäufen, desto langsamer wird er laufen und desto größer ist die Wahrscheinlichkeit für Probleme).

Machen Sie also NICHT den Vorschlag von rake db:migrate, der in der zum Zeitpunkt dieses Schreibens am niedrigsten bewerteten Antwort vorgeschlagen wurde.

3
Colin Summers

Ich hatte auch ein ähnliches Problem, bei dem mein altes Schema nicht aktualisiert wurde, selbst wenn ich die Migration gelöscht habe.

Also habe ich alle vorhandenen Tabellen in der Datenbank gelöscht und erneut migriert. Beim Ausführen des Befehls "db: schema: load" erhielt ich eine neue schema.rb.

drop table my_table_name // deleted them indivisully
rake db:migrate
rake db:schema:dump // re-created a new schema
0
R.Cha