ruby-on-rails - tutorial - ruby on rails wiki




Bereinigen oder erstellen Sie eine Ruby on Rails-Datenbank neu (12)

Auf Rails 4 wird alles 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 alle Migrationen nacheinander anwenden zu müssen.

Ich habe eine dev Ruby on Rails Datenbank voller Daten. Ich möchte alles löschen und die Datenbank neu erstellen. Ich denke an etwas wie:

rake db:recreate

Ist das möglich?



Da Sie in der Entwicklung immer die Datenbank neu erstellen möchten, können Sie eine Rake-Aufgabe in Ihrem lib / tasks-Ordner 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


Geben Sie einfach die Reihenfolge der Schritte ein: Löschen Sie die Datenbank, erstellen Sie sie erneut, migrieren Sie Daten, und wenn Sie Samen haben, säen Sie die Datenbank:

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

Da die Standardumgebung für rake die Entwicklung ist , sollten Sie für den Fall, dass die Ausnahme in Spezifikationstests angezeigt wird, db für die Testumgebung wie folgt neu erstellen:

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

In den meisten Fällen wird die Testdatenbank während der Testprozeduren ausgesät, so dass db:seed task action nicht übergeben werden muss. Ansonsten müssen Sie die Datenbank vorbereiten:

rake db:test:prepare

oder

RAILS_ENV=test rake db:seed

Zusätzlich können Sie den folgenden Code in Rakefile 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 ausstellen:

rake db:recreate

Ich benutze den folgenden 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 ​​und nannte es remigrate


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

Dies wird Ihre Datenbank zerstören und dann erstellen und dann Ihr aktuelles Schema migrieren:

rake db:drop db:create db:migrate

Alle Daten gehen in beiden Szenarien verloren.


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

rake db:create

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

rake db:schema:load

... um die Datenbank von Grund auf aus Ihrer schema.rb Datei zu erstellen.


Sie können diese folgende Befehlszeile verwenden:

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

Sie können manuell Folgendes tun:

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

Oder db/seeds.rb nur rake db:reset , das die obigen Schritte db/seeds.rb aber auch die Datei db/seeds.rb .

Eine zusätzliche Nuance ist, dass rake db:reset direkt von Ihrer schema.rb Datei schema.rb alle Migrationsdateien erneut schema.rb .

Ihre Daten werden in jedem Fall weggeblasen.


Update: Mit dem Erscheinen von Rails 5 wird dieser Befehl über diesen Befehl zugänglich sein:

rails db: bereinigen db: create db: migrieren RAILS_ENV = test

Ab dem neusten Release von rails 4.2 kannst du jetzt:

rake db:purge 

Quelle: commit

# 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

Verwenden Sie wie

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

Alles in einer Linie. 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 von config / database.yml übernommen)

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

db: seed - wird Seed-Daten aus dem Verzeichnis (db / migration / seed.rb) ausführen .

Ich bevorzuge normalerweise:

rake db:reset

um alles gleichzeitig zu tun.

Prost!





rake