Ich habe eine Ruby on Rails-Entwicklerdatenbank voller Daten. Ich möchte alles löschen und die Datenbank neu erstellen. Ich denke darüber nach, etwas zu verwenden wie:
rake db:recreate
Ist das möglich?
ruby-on-rails
ruby-on-rails-3
rake
Ein Lehrling
quelle
quelle
rake db:drop db:create db:schema:load
könnte dies angemessener sein alsrake db:drop db:create db:migrate
(obwohl ich bereit bin, mich darin zu irren).rake db:drop db:create db:migrate
db:drop + db:create + db:migrate == db:migrate:reset
. Normalerweise greife ich zurückdb:schema:load
, wenn Migrationen unterbrochen sind. Ich muss die Datenbank selten neu erstellen, daher spielt Geschwindigkeit keine große Rolle. Auch wenn Sie nicht angewendete Migrationen habendb:schema:load
unddb:reset
diese nicht anwenden. Ich bin mir nicht sicher, ob das ein großes Argument ist.Antworten:
Ich kenne zwei Möglichkeiten, dies zu tun:
Dadurch wird Ihre Datenbank zurückgesetzt und Ihr aktuelles Schema mit allen Elementen neu geladen:
Dadurch wird Ihre Datenbank zerstört, erstellt und anschließend das aktuelle Schema migriert:
In beiden Szenarien gehen alle Daten verloren.
quelle
rake db:reset
auch alle Migrationen auszuführen (zumindest auf Rails 3), also sollte das alles sein, was benötigt wird, oder?rake db:test:prepare
Testen ausführen , sonst erhalten Sie eine Fehlermeldung wie:Could not find table 'things' (ActiveRecord::StatementInvalid)
rake db:reset
undrake db:drop db:create db:migrate
zwei ganz verschiedene Dinge tun . Letzterer löscht die gesamte App-Datenbank, erstellt sie neu und durchläuft dann jede Migration, um das Schema (db/schema.rb
oderdb/structure.sql
) zu aktualisieren , füllt es jedoch nicht mit Startdaten. Der erste ist stattdessen ein Alias fürrake db:drop db:schema:load db:seed
, sodass die gesamte App-Datenbank gelöscht wird, das Schema jedoch nicht aktualisiert wird und dann mit Startdaten gefüllt wird. Wenn Sie also an Ihren Migrationen nichts geändert haben, ist die erste schneller und die zweite sicherer.Auf Schienen 4 ist alles was benötigt wird
Dadurch wird der gesamte Inhalt Ihrer Datenbank gelöscht und das Schema aus Ihrer Datei schema.rb neu erstellt, ohne dass alle Migrationen einzeln angewendet werden müssen.
quelle
db:drop
unddb:create
war überflüssig.Ich benutze den folgenden Liner im Terminal.
Ich habe dies als Shell-Alias eingefügt und benannt
remigrate
Inzwischen können Sie Rails-Aufgaben einfach "verketten":
quelle
db:reset
, was nur ein Google (oder überprüfen Sie die Guides ) entfernt ist. Mein Kommentar war nicht, davon abzuraten, sondern zu vermeiden,db:migrate
wann Sie wirklich wollendb:schema:load
.rake
:rake db:drop db:create db:schema:load
.db:migrate
... währenddb:schema:load
es empfindlich ist, wenn jemand vergisst, schema.rb neben einer neuen Migration in die Versionskontrolle einzuchecken.Update: In Rails 5 kann auf diesen Befehl über diesen Befehl zugegriffen werden:
rails db:purge db:create db:migrate RAILS_ENV=test
Ab der neuesten Version von Rails 4.2 können Sie jetzt Folgendes ausführen:
Quelle: Commit
Es kann wie oben erwähnt zusammen verwendet werden:
quelle
db:purge
"entferne alle Daten, aber behalte alle Tabellen und Spalten bei"db:purge
die Tabellen nicht zu erhalten.Je nachdem, was Sie wollen, können Sie verwenden ...
rake db:create
… Um die Datenbank von Grund auf neu zu erstellen
config/database.yml
oder…rake db:schema:load
… Um die Datenbank von Grund auf aus Ihrer
schema.rb
Datei zu erstellen.quelle
Über die Befehlszeile ausführen
quelle
schema.rb
und wenn Sie nurdrop
undcreate
,migrate
tut nichts (getestet auf Schienen 6)Verwenden Sie wie
Alles in einer Zeile. Dies ist schneller, da die Umgebung nicht immer wieder neu geladen wird.
db: fallen lassen - löscht die Datenbank.
db: create - erstellt eine Datenbank (host / db / password wird aus config / database.yml übernommen)
db: migrate - führt vorhandene Migrationen aus dem Verzeichnis aus (db / migration / .rb) * aus.
db: seed - führt die möglichen Seed-Daten aus dem Verzeichnis aus (db / migration / seed.rb) aus .
Normalerweise bevorzuge ich:
alles auf einmal tun.
Prost!
quelle
db:reset == db:drop + db:schema:load + db:seed
,db:migrate:reset == db:drop + db:create + db:migrate
Geben Sie einfach die Reihenfolge der Schritte ein: Löschen Sie die Datenbank, erstellen Sie sie erneut, erstellen Sie Daten, und säen Sie die Datenbank, wenn Sie Seeds haben:
Da die Standardumgebung für
rake
ist die Entwicklung , für den Fall , wenn Sie sehen , die Ausnahme in spec Tests, sollten Sie für die neu erstellen db Testumgebung wie folgt:In den meisten Fällen wird die Testdatenbank während der Testprozeduren gesät, sodass
db:seed
keine Aufgabenaktion übergeben werden muss. Andernfalls müssen Sie die Datenbank vorbereiten:oder
Um die Aufgabe zum erneuten Erstellen zu verwenden , können Sie Rakefile außerdem den folgenden Code hinzufügen :
Dann Ausgabe:
quelle
Sie können manuell tun:
Oder einfach
rake db:reset
, was die obigen Schritte ausführt, aber auch Ihredb/seeds.rb
Datei ausführt.Eine zusätzliche Nuance ist, dass
rake db:reset
direkt aus Ihrerschema.rb
Datei geladen wird, anstatt alle Migrationsdateien erneut auszuführen.Ihre Daten werden in jedem Fall weggeblasen.
quelle
Sie können die folgende Befehlszeile verwenden:
quelle
Um eine bestimmte Datenbank zu löschen, können Sie dies auf der Rails-Konsole tun:
Und dann DB erneut migrieren
quelle
Auf Schienen 4.2, um alle Daten zu entfernen, aber die Datenbank beizubehalten
https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
quelle
Sie können
db:reset
- für run db: drop und db: setup oder verwendendb:migrate:reset
, db: create und db: migrate verwenden.abhängig von dir willst du exist schema.rb verwenden
quelle
Laut Rails-Handbuch sollte dieser eine Liner verwendet werden, da er
schema.rb
von den Migrationsdateien geladen wird, anstatt sie einzeln neu zu laden :quelle
Da Sie in der Entwicklung die Datenbank immer neu erstellen möchten, können Sie eine Rake-Task in Ihrem lib / task-Ordner so definieren.
und im Terminal werden Sie laufen
Es wird Ihre Datenbank neu erstellen
quelle
Ich denke, der beste Weg, um diesen Befehl auszuführen:
quelle
Einfach kann man rennen
rake db:setup
Es wird die Datenbank löschen, eine neue Datenbank erstellen und die Datenbank aus dem Seed füllen, wenn Sie eine Seed-Datei mit einigen Daten erstellt haben.
quelle
3 Optionen, gleiches Ergebnis:
1. Alle Schritte:
2. Zurücksetzen:
3. Migrieren: Zurücksetzen:
Anmerkungen:
quelle
Ich habe heute einige Änderungen an meinem Schienenschema vorgenommen. Mir wurde klar, dass ich zwei zusätzliche Modelle in einer Hierarchie und einige andere zum Löschen brauchte. An den Modellen und Steuerungen waren viele kleine Änderungen erforderlich.
Ich habe die beiden neuen Modelle hinzugefügt und sie erstellt mit:
Dann habe ich die Datei schema.rb bearbeitet. Ich habe die alten Modelle, die nicht mehr benötigt wurden, manuell entfernt, das Fremdschlüsselfeld nach Bedarf geändert und es nur ein wenig neu angeordnet, um es mir klarer zu machen. Ich habe alle Migrationen gelöscht und dann den Build erneut ausgeführt über:
Es hat perfekt funktioniert. Natürlich müssen alle Daten neu geladen werden. Rails erkannte, dass die Migrationen gelöscht worden waren, und setzte die Hochwassermarke zurück:
quelle