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

18voto

user2747051 Punkte 151

Führen Sie in der Befehlszeile Folgendes aus

rake db:migrate:reset

2 Stimmen

Dies ist die einzige Möglichkeit, die App dazu zu bringen, alle Migrationen erneut durchzuführen. Da jede Migration Änderungen an schema.rb und wenn Sie nur drop y create , migrate bewirkt nichts (getestet auf Rails 6)

17voto

In Rails 6 gibt es eine bequeme Möglichkeit, die DB zurückzusetzen und die Seeds erneut zu pflanzen:

rails db:seed:replant # Truncates tables of each database for current environment and loads the seeds

https://weblog.rubyonrails.org/2019/3/15/this-week-in-rails-security-fixes-bulk-insert-and-upsert-seeds-replanting/

13voto

Manish Shrivastava Punkte 27921

Verwenden Sie wie

rake db:drop db:create db:migrate db:seed

Alles in einer Zeile. Dies ist schneller, da die Umgebung nicht immer wieder neu geladen werden muss.

db:drop - wird die Datenbank gelöscht.

db:erstellen - wird eine Datenbank erstellen (host/db/password wird aus config/database.yml übernommen)

db:migrieren - führt bestehende Migrationen aus dem Verzeichnis (db/migration/ .rb)*.

db:seed - werden die Seed-Daten aus dem Verzeichnis (db/migration/seed.rb) ..

Ich bevorzuge normalerweise:

rake db:reset

um alles auf einmal zu tun.

Zum Wohl!

1 Stimmen

Ich füge gerne db:test:prepare hinzu, um sicherzugehen. Das hängt natürlich davon ab, ob man testet oder nicht.

1 Stimmen

db:reset == db:drop + db:schema:load + db:seed , db:migrate:reset == db:drop + db:create + db:migrate

11voto

Geben Sie einfach die Reihenfolge der Schritte an: Löschen Sie die Datenbank, legen Sie sie erneut an, migrieren Sie die Daten und säen Sie die Datenbank aus, wenn Sie Saatgut haben:

rake db:drop db:create db:migrate db:seed

Da die Standardumgebung für rake es Entwicklung Wenn Sie die Ausnahme in den Spezifizierungstests sehen, sollten Sie die db für die Test Umgebung wie folgt:

RAILS_ENV=test rake db:drop db:create db:migrate

In den meisten Fällen wird die Testdatenbank während der Testverfahren gesät, so dass db:seed Task-Aktion muss nicht übergeben werden. Andernfalls müssen Sie die Datenbank vorbereiten:

rake db:test:prepare

oder

RAILS_ENV=test rake db:seed

Darüber hinaus ist für die Verwendung der wiederherstellen. Aufgabe können Sie hinzufügen in Rakefile den folgenden Code:

namespace :db do
   task :recreate => [ :drop, :create, :migrate ] do
      if ENV[ 'RAILS_ENV' ] !~ /test|cucumber/
         Rake::Task[ 'db:seed' ].invoke
      end
   end
end

Dann Ausgabe:

rake db:recreate

8voto

Erik Trautman Punkte 5422

Das können Sie manuell tun:

rake db:drop
rake db:create
rake db:migrate

Oder einfach rake db:reset , die die oben genannten Schritte ausführt, aber auch Ihre db/seeds.rb Datei.

Eine zusätzliche Nuance ist, dass rake db:reset lädt direkt von Ihrem schema.rb Datei, anstatt alle Migrationsdateien erneut auszuführen.

Ihre Daten werden in jedem Fall weggepustet.

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