Um drush in einer Multisiteumgebung zu arbeiten, haben sich folgende Mechanismen als nützlich erwiesen:
An dieser Stelle werden Aliase auf die jeweiligen drush-Version(Symlink) und der auf -r bzw. --root folgenden Wurzel der Drupal-Installation gesetzt.
Alternativ zu Aliasen auf die Drupal-Wurzel, kann dies auch über
drushrc.php, die Konfigurationsdatei für drush erfolgen.
Drush ist in nach /usr/local/share/ installiert worden und das Wrapper-Skript /usr/local/share/drush/drush ist ein Softlink nach /usr/local/bin/drush.
Der Aufruf von drush erfolgt über den angelegten Alias + die Spezifizierung der Subsite,
mittels -l oder --uri="".
Im folgenden Beispiel werden die Informationen über den Status der Seite aktualisiert.
Für 5.x ist das Modul Update Status Voraussetzung für die Aktionen pm-refresh (rf) und pm-update (up).
Wenn sites/all/modules und sites/example.com/modules parallel existieren, installiert drush Module nach sites/all/modules.
Im Falle, das sites/all/modules nicht existiert, dafür aber sites/example.com/modules wird sites/all/modules erstellt und benutzt.
Um trotzdem sites/example.com/modules verwenden zu können existiert in sites/all kein modules Verzeichnis und sites/all ist schreibgeschütz.
Rudimente für ein Drupal-Deployment mit
unter Verwendung, der in Drupal-7 neu eingeführten Multisite-Features in der Datei sites.php, Drush-Aliases
und einer speziellen settings.php,
die in diesem Fall versioniert wird.
Die in Drupal 7.x neu eingeführte Datei sites.php stellt erstmalig Verzeichnis-Aliase für Drupal-Multisites zur Verfügung.
So ist es jetzt möglich mit verschiedenen Domains bzw. VirtualHosts ein bestimmtes Verzeichnis innerhalb von sites anzusprechen,
ohne über z.B. Symbolische Links zu gehen, was in vorgigen Drupal-Versionen zur Folge haben konnte, daß Datei- oder Modulpfade beim "umbiegen" von der Dev-Site example.mydomain.de auf die Live-Site example.com divergent sind.
// (LOCAL) DEV SITE
$sites['example.localhost'] = 'example.com';
// STAGE SITES
$sites['stage-example.mydomain.de'] = 'example.com';
$sites['stage.example.com'] = 'example.com';
// LIVE SITE
$sites['example.com'] = 'example.com';
Im folgenden Ausschnitt der settings.php werden für
unterschiedliche Datenbanken und Vorbelegungen von Variablen definiert.
Die verschiedenen Umgebungen sind von einem Switch auf $_SERVER['HTTP_HOST'] eingeschlossen,
und es werden über den Host-Header des aktuellen Requests die entsprechenden Einstellungen genommen.
Die Verwendung des Contributed-Modules "Environment Indicator" weist optisch zusätzlich darauf hin, auf welcher Umgebung man sich gerade befindet, hierzu hat mich besonders Dirk Rüdigers Artikel zu Drush site-alias motiviert(s.u.).
switch ($_SERVER['HTTP_HOST']) {
case 'stage.example.com':
case 'stage-example.mydomain,de':
$conf['environment_indicator_text'] = 'STAGE SITE';
$conf['environment_indicator_color'] = 'salmon';
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'stage_db',
'username' => 'stage_db_user',
'password' => 'stage_db_passwd',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
break;
case 'example.com':
$conf['environment_indicator_text'] = 'LIVE SITE';
$conf['environment_indicator_color'] = 'red';
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'live_db',
'username' => 'live_db_user',
'password' => 'live_db_passwd',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
break;
default:
$conf['environment_indicator_text'] = 'LOCAL DEV SITE';
$conf['environment_indicator_color'] = 'green';
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'local_dev',
'username' => 'local_dev_user',
'password' => 'local_dev_passwd',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
}
In drush V. 3. wurden Site-Aliase eingeführt, dies ermöglicht, ähnlich wie bei Aliasen auf der Shell eine kurze Schreibweise für eine längere Befehlangabe.
Um explizit eine Drupal-Site und deren spezifische Einstellungen in einer Drupal-Multisite-Umgebung anzusprechen,
sind die Angabe der Drupal-Wurzel (--root=/path/to/drupal)
und der Name der Site bzw. dem Namen des Verzeichnisse in dem die jeweilige Site liegt (--uri=example.com) nötig.
Durch das folgende Snippet lassen sich die Instanzen über die Aliase
ansprechen und die Optionen --uri=example.com bzw. der kurzen Schreibweise -l example.com werden $_SERVER['HTTP_HOST'] durch drush gesetzt.
$aliases['dev'] = array(
'uri' => 'example.localhost',
'root' => '/multi/drupal/7.x',
);
$aliases['stage'] = array(
'uri' => 'stage-example.mydomain.de',
'root' => '/multi/drupal/7.x',
);
$aliases['stage2'] = array(
'parent' => '@stage',
'uri' => 'stage.example.com',
);
$aliases['live'] = array(
'uri' => 'example.com',
'root' => '/multi/drupal/7.x',
);
Analog zum Host-Header des aktuellen Requests einer Web-Anfrage
wird in der obigen settings.php nun hierüber verzweigt.