Ich habe eine dev Ruby on Rails-Datenbank voller Daten. Ich möchte alles löschen und die Datenbank neu erstellen. Ich denke an die Verwendung von etwas wie:
rake db:recreate
Ist dies möglich?
Ich habe eine dev Ruby on Rails-Datenbank voller Daten. Ich möchte alles löschen und die Datenbank neu erstellen. Ich denke an die Verwendung von etwas wie:
rake db:recreate
Ist dies möglich?
Ich kenne zwei Möglichkeiten, dies zu tun:
Dadurch wird Ihre Datenbank zurückgesetzt und Ihr aktuelles Schema mit allen neu geladen:
rake db:reset db:migrate
Dadurch wird Ihre Datenbank zerstört, dann neu erstellt und anschließend Ihr aktuelles Schema migriert:
rake db:drop db:create db:migrate
In beiden Szenarien gehen alle Daten verloren.
Es scheint rake db:reset
führt auch alle Migrationen aus (zumindest auf Rails 3), also sollte das alles sein, was benötigt wird, richtig?
Oder besser gesagt, das Schema bleibt identisch mit dem, was bei allen Migrationen der Fall wäre. Aber die Migrationen werden nicht per se ausgeführt (wenn Sie also Migrationen haben, die Daten einfügen, wird das nicht passieren; dafür sollten Sie wirklich eine db/seeds.rb-Datei verwenden).
Ich weiß, dass für Tracks GTD app db:migrate nicht funktioniert hat. Ich musste db:reset durchführen, als ich von Sqlite3 zu Postgres wechselte.
Funktioniert auch für Rails 3. nützlich, wenn Sie gerade Ihre Testdatenbank durcheinander gebracht haben und sie auf eine funktionierende Version zurücksetzen möchten, die mit Ihrer Entwicklungsdatenbank übereinstimmt
Vielen Dank für diese Information. Mir war nicht klar, dass db:drop
y db:create
überflüssig waren.
Dadurch wird das Schema nicht aktualisiert, und es ist kein sicherer Weg, wenn Sie Ihre Migrationen überarbeiten.
Ich verwende den folgenden Einzeiler in Terminal.
$ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare
Ich habe dies als Shell-Alias angelegt und es so benannt remigrate
Inzwischen können Sie Rails-Aufgaben problemlos "verketten":
$ rake db:drop db:create db:migrate db:schema:dump db:test:prepare # db:test:prepare no longer available since Rails 4.1.0.rc1+
Dadurch werden alle Ihre Migrationen nacheinander ausgeführt, was nicht skalierbar und fehleranfällig ist. Außerdem bin ich mir ziemlich sicher, dass db:migrate Ihre schema.rb aktualisiert, sodass Ihr schema:dump nichts Nützliches tut.
@AnApprentice Sie können db:reset
das ist nur ein Google (oder ein Check auf der Leitfäden ) weg. Meine Bemerkung war nicht als Ratschlag zu verstehen, das nicht zu verwenden, sondern um die Verwendung von db:migrate
wenn Sie wirklich etwas wollen db:schema:load
.
Update: In Rails 5 wird dieser Befehl über diesen Befehl zugänglich sein:
rails db:purge db:create db:migrate RAILS_ENV=test
Seit der neuesten Version 4.2 von Rails können Sie diese nun ausführen:
rake db:purge
Fuente: übergeben.
# desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases."
task :purge => [:load_config] do
ActiveRecord::Tasks::DatabaseTasks.purge_current
end
Es kann wie oben erwähnt zusammen verwendet werden:
rake db:purge db:create db:migrate RAILS_ENV=test
Sie müssen zuerst die Datenbank löschen oder Sie können auch nur die Tabellen löschen, wenn Sie das bevorzugen.
+1 für Schema laden. manchmal Migrationen durcheinander kommen, aber das Schema sollte sein, was intakt gehalten wird.
Ich habe in The Rails 3 Way gelesen, dass das Laden des Schemas der richtige Weg ist, im Gegensatz zur Ausführung aller Migrationen. Ich kann mich nicht mehr genau an die Argumentation erinnern, aber es scheint Sinn zu machen. Wenn das Endergebnis in beiden Fällen dasselbe ist, scheint es einfacher und weniger fehleranfällig zu sein, die Datenbank aus dem Schema zu laden, als eine Reihe von Migrationen durchzuführen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Ich würde vorschlagen, die am höchsten bewertete Antwort nicht zu berücksichtigen. Meiner Meinung nach
rake db:drop db:create db:schema:load
angemessener sein könnte alsrake db:drop db:create db:migrate
(obwohl ich bereit bin, mich da zu irren).0 Stimmen
Mögliches Duplikat von Zurücksetzen der Datenbank (alles löschen), dann eine Datenbank einrichten
2 Stimmen
rake db:drop db:create db:migrate
0 Stimmen
db:drop + db:create + db:migrate == db:migrate:reset
. Ich greife normalerweise aufdb:schema:load
wenn Migrationen unterbrochen werden. Ich muss die Datenbank nur selten neu erstellen, daher spielt die Geschwindigkeit keine große Rolle. Auch, wenn Sie nicht angewandte Migrationen haben,db:schema:load
ydb:reset
wird sie nicht anwenden. Ich bin mir nicht sicher, ob das ein gutes Argument ist.