Einige Module verfügen über Deinstallationsroutinen. Wobei normalerweise Datenbanktabellen für dieses Modul, Variablen aus der Variablentabelle und von diesem Modul eingeführte Gebietsschemata entfernt werden. Diese Routinen befinden sich in .install
diesem Modul.
Daher können sie nicht ausgeführt werden, ohne dass dieses Modul vorhanden ist. Hier sind unsere aktuellen Schritte. Meine Frage ist: Kann das einfacher und effektiver gemacht werden? Angenommen, ich entferne das Modul foo_bar.
- Bereiten Sie in RCS eine neue Version vor, in der:
- Alle CSS- und Theme-Overrides, die foo_bar verwenden oder darauf aufbauen, werden entfernt.
- Alle CSS- und Theme-Overrides für Module, die von foo_bar abhängen, werden entfernt.
- Schieben Sie diese Freigabe zur Annahme. Testen Sie die Deinstallation (von admin / modules) mit einer aktuellen Kopie der Produktionsdatenbank.
- Wenn alles in Ordnung ist, stellen Sie die neue Codebasis für die Produktion bereit und deinstallieren Sie dort foo_bar und seine Abhängigkeiten. Dies ruft die Deinstallation in den verschiedenen Modulen auf und bereinigt die Datenbank.
- Bereiten Sie in RCS (git) eine neue Version vor, in der der Code tatsächlich entfernt wird.
- Setzen Sie das ein, um zu akzeptieren, dass wir testen, ob nichts versehentlich davon abhängt (einige hässliche Module oder Designfunktionen enthalten Dateien direkt von anderen Modulen. Insbesondere CSS, JS oder Bilddateien).
- Wenn akzeptiert, stellen Sie eine neue Version für die Produktion bereit. Die Produktion verfügt nun über eine saubere Datenbank und eine saubere Codebasis .
Problem, das ich nicht lösen kann, ist, dass dies immer zwei Versionen benötigt. Da in Drupal ein Release erfordert, dass die Site offline ist, bedeutet dies zweimal Ausfallzeit, um nur ein Modul zu entfernen. Außerdem sind zwei Release-Verfahren erforderlich, die in professionellen Hosting-Umgebungen sehr teuer, zeitaufwändig oder frustrierend sein können.
Wenn wir das Modul in der ersten Iteration aus der Codebasis entfernen, können wir die Deinstallations-Hooks nicht ausführen, wodurch viele Flusen in der Datenbank verbleiben. nicht nur ein paar Tabellen, sondern vor allem Variablen und Gebietsschemata. Wenn wir das Modul nicht aus der Codebasis entfernen, bedeutet dies, dass die Codebasis mit veraltetem, nicht verwendetem Code wächst. Dies verursacht keinen Performance-Overhead, macht jedoch die Pflege des Codes immer schwieriger.
Wie gehst du damit um?
[edit: Hinweis hinzugefügt, dass die Bereitstellung oft ein schwieriges Verfahren ist]