638 Stimmen

Eine Ruby on Rails-Datenbank löschen oder neu erstellen

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?

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 als rake db:drop db:create db:migrate (obwohl ich bereit bin, mich da zu irren).

0 Stimmen

2 Stimmen

rake db:drop db:create db:migrate

1183voto

thenengah Punkte 41785

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.

38 Stimmen

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?

2 Stimmen

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).

1 Stimmen

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.

177voto

Eneko Alonso Punkte 17508

Bei Rails 4 wird nur Folgendes benötigt

$ rake db:schema:load

Das würde den gesamten Inhalt Ihrer DB löschen und das Schema aus Ihrer schema.rb-Datei neu erstellen, ohne dass Sie alle Migrationen einzeln anwenden müssen.

6 Stimmen

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

0 Stimmen

Vielen Dank für diese Information. Mir war nicht klar, dass db:drop y db:create überflüssig waren.

3 Stimmen

Dadurch wird das Schema nicht aktualisiert, und es ist kein sicherer Weg, wenn Sie Ihre Migrationen überarbeiten.

48voto

TK. Punkte 25047

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+

12 Stimmen

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.

0 Stimmen

Wie leert man die datenbank? in der entwicklung... alles ausräumen.

3 Stimmen

@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 .

44voto

Robbie Guilfoyle Punkte 3187

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

0 Stimmen

Wie @bekicot in einfacherem Englisch sagt db:purge "alle Daten entfernen, aber alle Tabellen und Spalten beibehalten"

0 Stimmen

@MCB Ich habe mich geirrt, das tut mir leid, db:purge behält die Tabellen nicht bei.

30voto

coreyward Punkte 72986

Je nachdem, was Sie wollen, können Sie die

rake db:create

um die Datenbank von Grund auf neu zu erstellen aus config/database.yml , oder

rake db:schema:load

um die Datenbank von Grund auf aus Ihren schema.rb archivo.

1 Stimmen

Sie müssen zuerst die Datenbank löschen oder Sie können auch nur die Tabellen löschen, wenn Sie das bevorzugen.

5 Stimmen

+1 für Schema laden. manchmal Migrationen durcheinander kommen, aber das Schema sollte sein, was intakt gehalten wird.

0 Stimmen

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.com

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.

Powered by:

X