Einsatz von Modulen in Drupal-Projekten steuern

Mit dem Drupal-7-Modul Master haben wir ein Tool entwickelt, mit dem der Status von Modulen über die Laufzeit eines Projektes stets kontrolliert werden kann.

Fehlerquellen in Anwendungen minimieren

Um die Fehlerquellen in einem Projekt zu minimieren, ist es wichtig, dass von der Entwicklung bis hin zum Produktivbetrieb möglichst die gleiche Umgebung zur Verfügung steht. So können unvorhergesehene Einflüsse wesentlich minimiert und damit das Testen und Ausrollen einer Software erheblich stabiler gestaltet werden.

In Drupal stellen Module die zentralen Komponenten für die Funktionalität bereit. So ist es klar, dass das Aktivieren oder Deaktivieren von Modulen im Regelfall das Verhalten einer Webanwendung mit Drupal beeinflusst. Aus dem Grunde sollte in einer Drupal-Anwendung stets klar definiert sein, welche Module aktiv sind bzw. sein sollen.

Drupal-Funktionalität definieren

Das Master Modul bietet nun die Möglichkeit genau dies in einem Projekt zu definieren. In einer Liste werden alle Module aufgezählt, die zum Betrieb der Seite notwendig sind. Im Zusammenspiel mit Konfigurationsmanagement-Modulen wie Features lässt sich so die Funktionalität einer kompletten Drupal-Webanwendung klar festlegen. Module, die nicht aktiviert sein sollen, werden auch nicht in die Liste aufgenommen.

Deployment automatisieren

Dieser Ansatz kommt auch dem automatisierten Ausrollen und damit dem automatisierten Testen zugute. Anhand der definierten Liste können so nämlich Module aktiviert werden, die in jedem Fall benötigt werden. Alle anderen Module können damit auch automatisch deaktiviert werden.

Dies erleichtert zudem die Arbeit im Team, da somit jeder Entwickler stets anhand der Modulliste weiß, welche Module aktiviert sein sollen und welche eben nicht. Wenn in der Entwicklung ein neues Modul hinzukommt, wird es einfach der Liste hinzugefügt. Wenn ein Modul nicht mehr benötigt wird, wird es aus der Liste entfernt.

Master verwenden

Wie das ganze nun konkret mit Master umgesetzt werden kann, möchte ich an einem kurzen Beispiel zeigen.

Für unsere Internetseite haben wir zum Beispiel folgende Master-Module definiert:

<?php
// Master module settings.
$conf['master_modules'] = array(
  'undpaul_comment_userpictures',
  'undpaulde_base',
  'undpaulde_blog',
  'undpaulde_drupalgive',
  'undpaulde_page',
  'undpaulde_project',
  'undpaulde_seo',
  'undpaulde_statements',
  'undpaulde_team',
  'undpaulde_webform',
  'undpaulde_mobile',
);
$conf['master_modules:local'] = array(
  'stage_file_proxy',
  'maillog',
  'devel',
  'views_ui',
  'module_filter',
  'update',
  'field_ui',
  'environment_indicator',
);
$conf['master_modules:develop'] = array(
  'environment_indicator',
  'stage_file_proxy',
  'maillog',
);
$conf['master_modules:live'] = array();

Diesen Code haben wir in unsere shared.settings.php eingetragen (die Vorlage für die konkrete settings.php). Somit haben wir für alle Umgebungen (local, develop, live) unser Modulset definiert. Master berücksichtigt dabei automatisch die Abhängigkeiten zu anderen (vorhandenen) Modulen.

Indem wir nun die Drupal-Shell bemühen und den Befehl drush master-status --scope=live ausführen, können wir uns auf der Live-Seite ein Bild davon machen, welche Module aktiv sind und auch welche inaktiv sind, aber aktiviert werden sollten.

Mit dem Befehl drush master-ensure-modules --scope=live kann dann der gewünschte Status hergestellt werden. Es werden alle "Master-Module" und deren Abhängigkeiten aktiviert. Zudem werden alle nicht gelisteten Module deaktiviert und deinstalliert.

In unseren automatisierten Updates nutzen wir dies dann, um das Webprojekt entsprechend in der lokalen Entwicklungsumgebung, auf dem Staging-Server und auf dem Produktivsystem einzurichten.

drush $DRUSH_PARAMS --yes pm-enable master
drush $DRUSH_PARAMS --yes master-ensure-modules --scope=$STAGE_INDICATOR

Detaillierte Informationen

In unserem englischsprachigen Blog haben wir das Modul technisch es etwas ausführlicher beschrieben: Introducing Master for Drupal. Zudem darf natürlich jeder auf der Drupal-Projekt-Seite Fragen und Anregungen in die Issue-Queue stellen.

Ich bin gespannt auf eure Rückmeldung und auf eventuell erste Erfahrungsberichte.