Der Unterschied zwischen rake db:migrate
und rake db:reset
ist in meinem Kopf ziemlich klar. Was ich nicht verstehe, ist, wie rake db:schema:load
unterschiedlich die beiden früheren sind.
Nur um sicherzugehen, dass ich auf derselben Seite bin:
rake db:migrate
- Führt die Migrationen aus, die noch nicht ausgeführt wurden.rake db:reset
- Löscht die Datenbank (vermutlich einrake db:drop
+rake db:create
+rake db:migrate
) und führt die Migration auf einer neuen Datenbank aus.
Bitte helfen Sie zu klären, ob mein Verständnis falsch ist.
ruby-on-rails
ruby
database
rake
Gaurav Agarwal
quelle
quelle
rake --tasks
?rake db:migrate
ist richtig, aber Ihr Verständnis vonrake db:reset
ist falsch. Siehe die oberste Antwort von moritz.rails db:migrate
,rails db:reset
,rails db:schema:load
. Siehe stackoverflow.com/questions/38403533/…Antworten:
db: schema: load erstellt Tabellen und Spalten in der (vorhandenen) Datenbank nach schema.rb
db: setup macht db: create, db: schema: load, db: seed
In der Regel verwenden Sie db: migrate, nachdem Sie Änderungen am Schema über neue Migrationsdateien vorgenommen haben (dies ist nur dann sinnvoll, wenn sich bereits Daten in der Datenbank befinden). db: schema: load wird verwendet, wenn Sie eine neue Instanz Ihrer App einrichten.
Ich hoffe das hilft.
UPDATE für Schienen 3.2.12:
Ich habe gerade die Quelle überprüft und die Abhängigkeiten sind jetzt so:
db: schema: dump gibt das Schema der aktuellen Umgebung aus (und scheint auch die Datenbank zu erstellen)
db: setup führt db: schema: load, db: seed aus
Weitere Informationen finden Sie unter https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (für Rails 3.2.x) und https: // github .com / Rails / Rails / Blob / v4.0.5 / activerecord / lib / active_record / railties / database.rake (für Rails 4.0.x)
quelle
db:create
bei Bedarf auch. Zumindest ab Schienen 4.0.2.rake db:migrate
beim Aufrufen ausgeführt,rake db:setup
wenn ausstehende Migrationen vorliegen, ausstehende Migrationen jedoch nicht ausgeführt werden.TLDR
Verwenden
rake db:migrate
Wenn Sie Änderungen am Schema vornehmen möchtenrake db:reset
Wenn Sie die Datenbankschema.rb
löschen möchten , laden Sie das Schema neu und setzen Sie die Datenbank erneut einrake db:schema:load
Wenn Sie die Datenbank auf das Schema zurücksetzen möchten, wie inschema.rb
(Dies löscht alle Daten)Erklärungen
rake db:schema:load
richtet das Schema wie in derschema.rb
Datei angegeben ein. Dies ist nützlich für eine Neuinstallation der App, da dies nicht so lange dauert wiedb:migrate
rake db:migrate
nimmt Änderungen am vorhandenen Schema vor. Es ist wie das Erstellen von Versionen des Schemas.db:migrate
suchtdb/migrate/
nach Ruby-Dateien und führt die Migrationen aus, die noch nicht ausgeführt wurden, beginnend mit der ältesten. Rails erkennt anhand des Zeitstempels am Anfang des Migrationsdateinamens, welche Datei die älteste ist.db:migrate
hat den Vorteil, dass Daten auch in die Datenbank gestellt werden können. Dies ist eigentlich keine gute Praxis. Es ist besser,rake db:seed
Daten hinzuzufügen.rake db:migrate
Bietet Aufgaben nach oben , unten usw., die Befehle wie aktivierenrake db:rollback
und zum nützlichsten Befehl machen.rake db:reset
tut adb:drop
unddb:setup
Es löscht die Datenbank, erstellt sie erneut, lädt das Schema und initialisiert mit den Startdaten
Relevanter Teil der Befehle aus database.rake
quelle
Soweit ich weiß, wird Ihre Datenbank gelöscht und basierend auf Ihrer
db/schema.rb
Datei neu erstellt. Aus diesem Grund müssen Sie sicherstellen, dass Ihreschema.rb
Datei immer auf dem neuesten Stand und unter Versionskontrolle ist.quelle
Sie können sich einfach die Active Record Rake-Aufgaben ansehen, da sie meiner Meinung nach dort wie in dieser Datei leben. https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/lib/active_record/tasks/database_tasks.rb
Was sie tun, ist Ihre Frage richtig?
Das hängt davon ab, woher sie kommen, und dies ist nur ein Beispiel dafür, dass sie je nach Aufgabe unterschiedlich sind. Hier haben wir eine andere Datei voller Aufgaben.
https://github.com/rails/rails/blob/fe1f4b2ad56f010a4e9b93d547d63a15953d9dc2/activerecord/Rakefile
welches diese Aufgaben hat.
Dies beantwortet Ihre Frage möglicherweise nicht, kann Ihnen jedoch einen Einblick in die Vorgehensweise geben, insbesondere in die Rake-Dateien und -Aufgaben. Da sie Ihnen bei der Verwendung von Schienen sehr gut helfen, dokumentieren sie den Code nicht immer so gut. Wir könnten alle dort helfen, wenn wir wissen, was es tun soll.
quelle
AKTUALISIERT für Rails 5:
db:create
- Erstellt die Datenbank für die aktuelle RAILS_ENV- Umgebung. Wenn RAILS_ENV nicht angegeben ist, werden standardmäßig die Entwicklungs- und Testdatenbanken verwendet.db:create:all
- Erstellt die Datenbank für alle Umgebungen.db:drop
- Löscht die Datenbank für die aktuelle RAILS_ENV- Umgebung. Wenn RAILS_ENV nicht angegeben ist, werden standardmäßig die Entwicklungs- und Testdatenbanken verwendet.db:drop:all
- Löscht die Datenbank für alle Umgebungen.db:migrate
- Führt Migrationen für die aktuelle Umgebung aus, die noch nicht ausgeführt wurden. Standardmäßig werden Migrationen nur in der Entwicklungsumgebung ausgeführt.db:migrate:redo
- Führt db: migrate: down und db: migrate: up oder db: migrate: rollback und db: migrate: up abhängig von der angegebenen Migration aus.db:migrate:up
- Führt den Start für die angegebene Migrationsversion aus.db:migrate:down
- Führt das Down für die angegebene Migrationsversion aus.db:migrate:status
- Zeigt den aktuellen Migrationsstatus an.db:migrate:rollback
- Setzt die letzte Migration zurück.db:version
- Druckt die aktuelle Schemaversion.db:forward
- Schiebt das Schema auf die nächste Version.db:seed
- Führt die Datei db / seeds.rb aus .db:schema:load
Erstellt die Datenbank aus der Datei schema.rb neu .db:schema:dump
Gibt das Schema der aktuellen Umgebung in db / schema.rb aus .db:structure:load
- erstellt die Datenbank aus der structure.sql Datei.db:structure:dump
- Gibt das Schema der aktuellen Umgebung in db / struct.sql aus . (Sie können eine andere Datei mit angebenSCHEMA=db/my_structure.sql
)db:setup
Führt db: create , db: schema: load und db: seed aus .db:reset
Läuft db: drop und db: setup .db:migrate:reset
- Läuft db: drop , db: create und db: migrate aus .db:test:prepare
- Suchen Sie nach ausstehenden Migrationen und laden Sie das Testschema. (Wenn Sie Rake ohne Argumente ausführen, wird dies standardmäßig ausgeführt.)db:test:clone
- Erstellen Sie die Testdatenbank aus dem Datenbankschema der aktuellen Umgebung neu.db:test:clone_structure
- Ähnlich wie bei db: test: clone , stellt jedoch sicher, dass Ihre Testdatenbank dieselbe Struktur einschließlich Zeichensätzen und Kollatierungen aufweist wie die Datenbank Ihrer aktuellen Umgebung.db:environment:set
- Legen Sie die aktuelle RAILS_ENV- Umgebung in den ar_internal_metadata fest Tabelle . (Wird im Rahmen der Überprüfung der geschützten Umgebung verwendet.)db:check_protected_environments
- Überprüft, ob in der aktuellen RAILS_ENV- Umgebung eine destruktive Aktion ausgeführt werden kann . Wird intern verwendet, wenn eine destruktive Aktion wie db: drop oder db: schema: load ausgeführt wird .quelle