Verwalten von Datenbankschemaänderungen in Open Source-Projektversionen

9

Ich verwalte eine Open-Source-PHP / MySQL-Webanwendung, die von einigen K-12-Schulen und einigen Colleges verwendet wird. Ich bin auch der einzige Entwickler des Projekts. Während es früher kaum mehr als ein Quelldownload einer Anwendung war, die mein Arbeitgeber hostet, habe ich im letzten Jahr daran gearbeitet, daraus ein "echtes" Open-Source-Projekt mit Dokumentation, nummerierten Veröffentlichungen, öffentlichen Änderungsprotokollen usw. zu machen.

Ich möchte den Upgrade-Prozess verbessern, und einer der potenziell schmerzhaften Bereiche (insbesondere für Schulen mit IT-Fachwissen) sind Änderungen am Datenbankschema zwischen den Releases. Sie treten nicht oft auf oder sind drastische Änderungen, aber ich würde mich über Vorschläge zu diesem Prozess freuen.

Derzeit verwalte ich ein SQL-Basisinstallationsskript, um die Datenbank in einer neuen Installation einzurichten. Dies umfasst das vollständige Schema für die aktuelle Version. Für eine Neuinstallation sind keine weiteren Maßnahmen erforderlich. Änderungen, die zwischen Releases auftreten, werden in upgrade-$releasever.sqlSkripten gespeichert , und es ist erforderlich, alle Upgrade-Skripts für alle übersprungenen Releases schrittweise auszuführen.

Shell-Skripte passen nicht gut zusammen, da viele unserer Benutzer auf Hosts ohne Shell-Zugriff arbeiten. Aufgrund anderer Prioritäten ist es unwahrscheinlich, dass ein komplexes PHP-Browser-basiertes Installations- / Upgrade-Skript zustande kommt. Ich möchte jedoch etwas mit einem browserbasierten PHP-Skript tun, um die Upgrades zu vereinfachen. Vorschläge, wie man es angeht?

Michael
quelle

Antworten:

3

Mein Projekt verfügt über eine update.php-Datei, die der Benutzer über seinen Browser ausführt, nachdem er eine neue Version der Software installiert hat. Dieses Aktualisierungsskript überprüft eine Datenbankversionsnummer, die in einer Tabelle in der aktiven Datenbank gespeichert ist, und führt alle Datenbankänderungsvorgänge durch, mit denen das Datenbankschema auf den neuesten Stand gebracht wird, einschließlich der Aktualisierung dieser Datenbankversionsnummer.

pyasi
quelle
Ich habe mir Ihr upgrade.php-Skript angesehen und das scheint das zu sein, was ich mir vorgestellt habe. Vielen Dank.
Michael
2

Drupal CMS hat eine interessante Lösung für Ihr Problem. Ich schlage vor, einen Blick auf Drupal im Allgemeinen zu werfen, wenn Sie webbasierte Lösungen mit PHP entwickeln. Es ist mein Lieblings-PHP-CMS und ich werde voreingenommen genug sein, um zu sagen, dass es das beste ist, das es gibt. ;)

Drupal bietet einen hochentwickelten Wrapper für Datenbankinteraktionen. Es ermöglicht die Abstraktion des tatsächlichen Datenbanktyps vom Modulentwickler, sodass es Ihnen egal ist, ob auf dem Server PostgreSQL, MySQL usw. ausgeführt wird. Sie können auch Ihre eigene Schnittstelle erstellen. Jedes Modul muss die Datei module.install bereitstellen, die hook_schemaund enthält hook_install. hook_schemawird zum Deklarieren des Tabellenschemas für das Modul verwendet, während hook_installdie Installationsprozedur ausgeführt wird. Die Architektur unterstützt auch den Begriff der Aktualisierung. Wenn der Benutzer das Modul bereits installiert hat, werden die richtigen Aktualisierungs-Hooks aufgerufen, sodass das Tabellenschema problemlos aktualisiert werden kann.

Werfen Sie einen Blick darauf: http://drupal.org/node/146862 Auch wenn Drupal nichts für Sie ist, können Sie sicher etwas aus ihren architektonischen Entscheidungen lernen.

sneg
quelle
0

Dazu haben wir Versionsordner erstellt. Wir haben alle Datenbankskripte in diesem Ordner abgelegt. Als es an der Zeit war, dies einem neuen Kunden zur Verfügung zu stellen, erhielten sie die neueste Version.

Wir haben auch alle Upgrade-Skripte in diesem Ordner gespeichert. Auf diese Weise können wir einen Kunden von Version x auf Version y migrieren.

Es ist nicht die beste Methode ... aber es hat bei uns funktioniert.

Michael Riley - AKA Gunny
quelle
Wenn ich das verstehe, klingt das ähnlich, wie ich es jetzt handhabe - meine Benutzer sind dafür verantwortlich, Upgrade-Skripte selbst und in der richtigen Reihenfolge auszuführen.
Michael