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.sql
Skripten 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?
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_schema
und enthälthook_install
.hook_schema
wird zum Deklarieren des Tabellenschemas für das Modul verwendet, währendhook_install
die 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.
quelle
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.
quelle