Rails Migrations

Migrations sind ein sehr kooles Feature, welches Rails seit Version 1.0 bietet: Anstatt das Datenbankschema als einfachen Dump zu definieren, kann man ein Migrationsfile schreiben, in dem die Tabellenstruktur Datenbank unabhängig festgehalten ist.

Neben dem Vorteil, dass man mit Migrations nicht mehr an einen Datenbanktyp gebunden ist (bspw. MySQL), bringen sie auch automatisch weitere Vorteile mit sich: Da Migrationen kaskadierend aufeinander aufbauen (Initiale Migration, Version 1, Version 2, …) kann man das Schema versionenspezifisch erweitern und so ganz einfach zu den verschiedenen Anwendungsversionen migrieren.

Da bei den meisten Anwendungen das Datenbankschema schon stand, bevor dieses Feature eingeführt wurde, haben es die Entwickler sehr leicht gemacht, aus einer bestehenden Datenbankstruktur ein Schema zu extrahieren. Mit dem Befehlrake db:schema:dump kann man sich sein Migration-Schema generieren lassen. Da die Migration wie gesagt DB-Typ unabhängig ist, kann es sein, dass die Tabellen Felder enthalten, welche sich nicht auf alle Datenbanktypen mappen lassen. In meinem Fall war es so, dass ich in einer MySQL Datenbank den Feldtyp SET benötigte und Rake dann den ganzen betroffenen Table ausließ. Um das Problem zu umgehen, habe ich zunächst die betroffenen Spalten gelöscht, die Migration erstellt und anschließen meine SET-Felder als benutzerdefinierte Spalten eingefügt - dadurch entfällt dann allerdings natürlich wieder die Datenbankunabhängigkeit.

Letzter Schritt wäre dann, das erstellte Schema in die Migration einzufügen. Dazu erstellt man zunächst mit dem Befehl ruby script/generate migration InitialSchema die dafür benötigten Dateien. Anschließend kopiert man das Schema in die Methode self.up der Klasse InitialSchema (db/001_initial_schema.rb). In der Methode self.down kann man festlegen, welche Änderungen beim Versions-Downgrade verworfen werden sollen (bspw. drop_table :beispieltabelle).

Wer jetzt erst eine neue Anwendung startet, kann seine Migration auch gleich selbst schreiben und braucht sich diese nicht generieren lassen - dazu das passende Rails Migration Cheat Sheet.

iOS app for GitHub

iOctocat

ist GitHub für die Hosentasche - deine Projekte und das was dort passiert immer dabei mit deinem iPhone und iPod Touch.
Die App ist