10.3 Rake-Tasks zum Verwalten von Datenbanken 

rake -T
Mit dem Befehl rake -T db erhalten Sie eine Liste sämtlicher Tasks, die mit Datenbanken zu tun haben. Im Folgenden werden sämtliche Rake-Tasks gruppiert nach Thema erläutert.
Erstellen und Löschen von Datenbanken 

Erstellen und entfernen
Mit den folgenden Rake-Tasks können auf einfache Weise Datenbanken erstellt und entfernt werden.
- rake db:create
Erzeugt die Datenbank, die in config/database.yml für die aktuelle Umgebung definiert ist. Dies ist standardmäßig die Datenbank, die unter development vorgegeben ist. Die aktuelle Umgebung kann mit der Umgebungsvariablen RAILS_ENV festgelegt werden. Mit dem Befehl rake db:create RAILS_ENV=production kann z. B. die Produktions-Datenbank erstellt werden.
- rake db:create:all
Erzeugt lokal alle Datenbanken, die in config/database.yml definiert sind.
- rake db:drop
Löscht die Datenbank der aktuellen Umgebung.
- rake db:drop:all
Löscht alle lokalen Datenbanken, die in config/database.yml definiert sind.
- rake db:reset
Löscht die Datenbank der aktuellen Umgebung, erzeugt sie neu und erstellt alle Tabellen anhand der Schema-Datei (siehe Abschnitt 10.3.6). Dies ist sinnvoll, wenn Sie Ihre Datenbank neu initialisieren möchten.
Informationen über die Datenbanken 

Zeichensatz und Sortierreihenfolge
Mit den folgenden Rake-Tasks kann man den verwendeten Zeichensatz und die Sortierreihenfolge abfragen.
- rake db:charset
Gibt den verwendeten Zeichensatz der Datenbank aus. Beispiel: utf8.
- rake db:collation
Gibt die verwendete Kollation der Datenbank aus. Die Kollation gibt an, wie sortiert werden soll, z. B., ob der Buchstabe Ö nach dem O sortiert wird. Beispiel: utf8_general_ci
Migrations 

Die folgenden Rake-Tasks verwalten die Migrations.
- rake db:migrate
Führt die Migration-Skripte im Ordner db/migrate aus und ändert die Datenbankstruktur entsprechend. Durch Angabe einer bestimmten Migration über den optionalen Parameter VERSION=x kann man die Datenbank auf den Stand dieser Version bringen. Nach der Ausführung des Tasks wird automatisch der Rake-Task db:schema:dump ausgeführt, um die Schema-Datei erneut zu erstellen (siehe Abschnitt 10.3.6). Der Task rake db:migrate sollte nicht verwendet werden, wenn Sie z. B. auf einem anderen System mit einer leeren Datenbank alle Tabellen herstellen wollen, da dies nicht nur länger dauert, sondern gegebenenfalls auch zu Konflikten führen kann. Verwenden Sie in diesem Fall entweder rake db:reset oder rake db:schema:load, um alle Tabellen zu generieren.
- rake db:rollback
Die letzte Migration wird rückgängig gemacht. Die Anzahl der Versionen, um die zurückgegangen werden soll, kann über STEP=n angegeben werden. Im Gegensatz zum Task rake db:migrate wird die Schema-Datei nicht erneut generiert.
- rake db:migrate:redo
Die letzteMigration wird rückgängig gemacht (Rollback) und anschließend wieder ausgeführt. Die Anzahl der Versionen, um die zurückgegangen werden soll, kann über STEP=n angegeben werden.
- rake db:migrate:reset
Die Datenbank wird gelöscht, dann wieder erstellt, und alle Migrations werden ausgeführt.
- rake db:abort_if_pending_migrations
Zeigt an, welche Migrations noch nicht mit rake db:migrate ausgeführt wurden. Beispiel:You have 1 pending migrations: 1 CreateProducts
- rake db:version
Gibt an, welche Schema-Version die aktuelle Datenbank hat. Angenommen, die Ausgabe des Befehl ist 3, so bedeutet dies, dass die ersten 3 Migrations ausgeführt wurden.
Fixtures 

Fixtures sind Test-Daten für die Models und befinden sich im Ordner test/fixtures .Mehr Informationen zu Fixtures siehe Kapitel 6.
- rake db:fixtures:load
Lädt die Fixtures in die aktuelle Datenbank der Entwicklungsumgebung. Wird der optionale Parameter FIXTURES=x,y gesetzt, werden nur diese Fixtures geladen.
- rake db:fixtures:identify
Sucht nach einem Fixture mit einem Label oder einer ID.
Testdatenbank 

In der Testdatenbank werden die Tests, die im Verzeichnis test defniert sind, ausgeführt. Siehe Kapitel 6.
- rake db:test:clone
Erstellt die Datenbank der Testumgebung anhand des aktuellen Datenbankschemas der Entwicklungsumgebung neu.
- rake db:test:clone_structure
Erstellt die Datenbank der Testumgebung anhand der aktuellen Struktur der Entwicklungsumgebung neu.
- rake db:test:prepare
Erstellt die Testdatenbank und lädt das Schema.
- rake db:test:purge
Leert die Testdatenbank.
Schema-Dateien 

schema.rb
Eine Schema-Datei beschreibt sämtliche Tabellen und Felder einer Datenbank. In Rails wird standardmäßig die Schema-Datei in Ruby generiert. Dies hat den Vorteil, dass die Schemadatei in jede Datenbank geladen werden kann, die von ActiveRecord unterstützt wird.
- rake db:schema:dump
Erstellt eine schema.rb -Datei im Verzeichnis db . Dieser Rake-Task wird auch automatisch nach jedem rake db:migrate ausgeführt.
- rake db:schema:load
Lädt eine schema.rb -Datei in die Datenbank. Dieser Task sollte dann verwendet werden, wenn Sie z. B. auf einem anderen System noch eine leere Datenbank haben. Wenn Sie noch keine Datenbank haben, können Sie sie mit dem Task rake db:create erstellen.
- rake db:structure:dump
Erstellt im Verzeichnis db aus der aktuellen Datenbank eine SQL-Datei development_structure.sql , in der sämtliche Tabellen-Definitionen (mit Feldern und Datentypen) enthalten sind. Dieser Task macht im Prinzip das Gleiche wie der Rake-Task db:schema:dump , nur dass statt einer Ruby-Datei eine SQL-Datei erstellt wird.
Sessions 

In Rails werden die Sessions standardmäßig im Cookie des Besuchers gespeichert. Dies ist in den meisten Fällen auch sinnvoll. In der Datei environment.rb im Verzeichnis config kann eingestellt werden, dass Sessions in einer Datenbank gespeichert werden sollen:
Listing config/environmentb.rb
config.action_controller.session_store = :active_record_store
In diesem Fall können folgende Rake-Tasks verwendet werden:
- rake db:sessions:create
Erstellt eine Migration-Datei zur Erstellung einer Sessions-Datenbanktabelle.
- rake db:sessions:clear
Löscht alle Daten aus der Sessions-Tabelle.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.