Ich habe eine dev Ruby in Rails Datenbank voller Daten. Ich möchte alles löschen und die Datenbank neu erstellen. Ich denke an so etwas wie:
rake db:recreate
Ist das möglich?
Ich kenne zwei Möglichkeiten, um dies zu tun:
Dies setzt Ihre Datenbank zurück und lädt Ihr aktuelles Schema mit allen:
rake db:reset db:migrate
Dies zerstört Ihre Datenbank und erstellt sie und migriert dann Ihr aktuelles Schema:
rake db:drop db:create db:migrate
In beiden Szenarien gehen alle Daten verloren.
Auf Rails 4 ist alles, was benötigt wird
$ rake db:schema:load
Das würde den gesamten Inhalt Ihrer Datenbank löschen und das Schema aus Ihrer schema.rb-Datei neu erstellen, ohne dass alle Migrationen einzeln durchgeführt werden müssten.
Ich benutze den folgenden einen Liner im Terminal.
$ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare
Ich habe dies als Shell-Alias angegeben und es remigrate
genannt.
Inzwischen können Sie Rails Aufgaben einfach "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+
Update: In Rails 5 kann auf diesen Befehl über folgenden Befehl zugegriffen werden:
Rails db:purge db:create db:migrate Rails_ENV=test
Ab dem neuesten Rails 4.2-Release können Sie jetzt Folgendes ausführen:
rake db:purge
Quelle: Festschreiben
# 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
Je nachdem, was Sie wollen, können Sie ...
rake db:create
… Um die Datenbank von Grund auf neu zu erstellen, von config/database.yml
, oder…
rake db:schema:load
… Um die Datenbank von Grund auf aus Ihrer schema.rb
-Datei zu erstellen.
Führen Sie einfach die folgenden Schritte aus: Löschen Sie die Datenbank, erstellen Sie sie erneut, migrieren Sie die Daten, und säen Sie die Datenbank, wenn Sie Samen haben:
rake db:drop db:create db:migrate db:seed
Da die Standardumgebung für rake
die Entwicklungsumgebung ist, sollten Sie für den Fall, dass Sie die Ausnahme in Spezifikationstests sehen, die Datenbank für das neu erstellen Testumgebung wie folgt:
Rails_ENV=test rake db:drop db:create db:migrate
In den meisten Fällen wird die Testdatenbank während der Testprozeduren ausgesät, sodass die Taskaktion db:seed
nicht übergeben werden muss. Andernfalls müssen Sie die Datenbank vorbereiten:
rake db:test:prepare
oder
Rails_ENV=test rake db:seed
Darüber hinaus können Sie zur Verwendung der Aufgabe zum erneuten Erstellen in Rakefile den folgenden Code hinzufügen:
namespace :db do
task :recreate => [ :drop, :create, :migrate ] do
if ENV[ 'Rails_ENV' ] !~ /test|cucumber/
Rake::Task[ 'db:seed' ].invoke
end
end
end
Dann geben Sie ein:
rake db:recreate
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 wird.
db: drop - löscht die Datenbank.
db: create - erstellt eine Datenbank (Host/db/password wird aus config/database.yml entnommen)
db: migrate - führt vorhandene Migrationen aus dem Verzeichnis (db/migration/. rb) * aus.
db: seed - Startet Startdaten aus dem Verzeichnis (db/migration/seed.rb) .
Normalerweise bevorzuge ich:
rake db:reset
alles auf einmal zu tun.
Prost!
Von der Kommandozeile ausführen
rake db:migrate:reset
Sie können manuell Folgendes tun:
rake db:drop
rake db:create
rake db:migrate
Oder einfach rake db:reset
, das die obigen Schritte ausführt, aber auch Ihre db/seeds.rb
-Datei ausführt.
Eine zusätzliche Nuance ist, dass rake db:reset
direkt aus Ihrer schema.rb
-Datei geladen wird, anstatt alle Migrationsdateien erneut auszuführen.
Ihre Daten werden in jedem Fall weggeblasen.
Sie können diese folgende Befehlszeile verwenden:
rake db:drop db:create db:migrate db:seed db:test:clone
Um eine bestimmte Datenbank zu löschen, können Sie dies auf der Rails Konsole tun:
$Rails console
Loading development environment
1.9.3 > ActiveRecord::Migration.drop_table(:<table_name>)
1.9.3 > exit
Und dann DB erneut migrieren
$bundle exec rake db:migrate
Auf Rails 4.2, um alle Daten zu entfernen, aber die Datenbank beizubehalten
$ bin/rake db:purge && bin/rake db:schema:load
https://github.com/Rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
Sie können db:reset
- zum Ausführen von db: drop und db: setup oder db:migrate:reset
- zum Ausführen von db: drop, db: create und db: migrate verwenden.
abhängig davon, ob Sie exist schema.rb verwenden möchten
Gemäß Rails guide sollte dieser eine Liner verwendet werden, da er aus dem schema.rb
geladen würde, anstatt die Migrationsdateien einzeln neu zu laden:
rake db:reset
Da Sie in der Entwicklung immer die Datenbank neu erstellen möchten, können Sie eine Rechenaufgabe in Ihrem lib/tasks-Ordner so definieren.
namespace :db do
task :all => [:environment, :drop, :create, :migrate] do
end
end
und im terminal wirst du rennen
rake db:all
es wird Ihre Datenbank neu erstellen
Einfach du kannst rennen
rake db:setup
Es löscht die Datenbank, erstellt eine neue Datenbank und füllt die Datenbank aus dem Seed, wenn Sie eine Seed-Datei mit einigen Daten erstellt haben.
3 Möglichkeiten, gleiches Ergebnis:
1. Alle Schritte:
$ rake db:drop # deletes the database for the current env
$ rake db:create # creates the database for the current env
$ rake db:schema:load # loads the schema already generated from schema.rb / erases data
$ rake db:seed # seed with initial data
2. Zurücksetzen:
$ rake db:reset # drop / schema:load / seed
. Migrieren: Zurücksetzen:
$ rake db:migrate:reset # drop / create / migrate
$ rake db:seed
Anmerkungen:
Ich denke, der beste Weg, um diesen Befehl auszuführen:
**rake db:reset** it does db:drop, db:setup
rake db:setup does db:create, db:schema:load, db:seed
Ich habe heute einige Änderungen an meinem Rails Schema vorgenommen. Mir wurde klar, dass ich zwei zusätzliche Modelle in einer Hierarchie und einige andere zum Löschen benötigte. An den Modellen und Steuerungen waren viele kleine Änderungen erforderlich.
Ich fügte die beiden neuen Modelle hinzu und erstellte sie mit:
rake db:migrate
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:
rake db:reset
Es hat perfekt funktioniert. Alle Daten müssen natürlich neu geladen werden. Rails hat festgestellt, dass die Migrationen gelöscht wurden, und die Hochwassermarke zurückgesetzt:
-- assume_migrated_upto_version(20121026094813, ["/Users/sean/Rails/f4/db/migrate"])