Ich habe gerade erst angefangen mit Ruby and Rails, und eines der Dinge, die mir wirklich Spaß machen, sind die Konventionen, die man benutzt.
Ich möchte dieses Verhalten in meinen eigenen Nicht-Ruby-Projekten nachahmen.
Meine Frage ist, wie es tatsächlich funktioniert? Ich weiß, dass ich den Rails-Code durchsehen kann, aber ich bin nicht so weit in meinem Verständnis, um zu wissen, was darin vorgeht.
Ich weiß, dass es ein Baseline-Skript benötigt und dann Änderungen des Update-Schemas dagegen ausführt. Aber woher weiß es, auf welcher Version es steht? Wie würde ich das in einem anderen Framework / Datenbank nachahmen?
Hinweis: Dies gilt soweit Rails 2.x. Es kann nicht für Schienen 3 zutreffend sein, da ich nicht so viel Zeit mit Schienen 3 verbracht habe, wie ich es gewünscht hätte.
Rails erstellt eine spezielle versteckte Tabelle namens schema_migrations
. Diese Tabelle hat eine einzelne Spalte namens version
. Und es gibt eine Zeile in dieser Spalte für jede Migration, die Sie haben. Der Wert ist der Zeitstempel, der dem Zeitstempel der Migrationsdatei entspricht.
Wenn Sie migrieren, werden alle Ihre Migrationen in chronologischer Reihenfolge angezeigt (aufgrund der timstampbasierten Namenskonvention auch alphabetisch sortiert). Für jede Migration wird nach einer übereinstimmenden Zeile in der Tabelle schema_migrations
gesucht. Wenn keine gefunden wird, wird die Migration ausgeführt und der Zeitstempel der Tabelle hinzugefügt. Wenn es einen findet, geht es davon aus, dass es bereits ausgeführt wurde und es einfach überspringt.
Das Ergebnis ist, dass zwei Entwickler Migrationen in beliebiger Reihenfolge durchführen können, und es ist in Ordnung. Dies liegt daran, dass Rails genau weiß, welche Migrationen ausgeführt wurden und welche nicht, unabhängig davon, wann Ihre Datenbank sie zum ersten Mal gesehen hat.
Um so etwas selbst zu tun, brauchen Sie einfach einen Weg, um diesen Zustand dauerhaft zu speichern, welche Schritte unternommen wurden und welche nicht.
Tags und Links ruby ruby-on-rails rake