wake-up-neo.com

Bereinigen oder erstellen Sie eine Ruby in Rails Datenbank

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?

558
AnApprentice

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.

1032
thenengah

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.

152
Eneko Alonso

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+
43
TK.

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
36

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.

29
coreyward

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!

11

Von der Kommandozeile ausführen

rake db:migrate:reset
11
user2747051

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.

8
Erik Trautman

Sie können diese folgende Befehlszeile verwenden:

rake db:drop db:create db:migrate db:seed db:test:clone
6
user1358180

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 
4
Kush

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

4

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

3
Aleksandr Babak

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
2
Victor

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

1
Obed Lorisson

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.

1
Touseef Murtaza

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:

  • Wenn schema: load verwendet wird, ist dies schneller als alle Migrationen, führt jedoch zu demselben Ergebnis.
  • Alle Daten gehen verloren.
  • Sie können mehrere Rechen in einer Zeile ausführen.
  • Funktioniert mit Rails 3.
1
urko

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
1
Thorin

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"])
0
ardochhigh