Ich verwende Drupal-Multi-Sites (einzelne Codebasis, mehrere Sites / *). Gleichzeitig habe ich begonnen, Drush-Aliase zu verwenden, um sie zu verwalten:
$ cat sites/all/drush/aliases.drushrc.php
<?php
$aliases['localdev'] = array(
'site-list' => array(
'site1',
'site2',
'site3',
),
);
?>
Auf diese Weise kann ich problemlos Aktionen auf allen Websites ausführen:
$ drush @localdev cc all
>> Ich habe auch gerade entdeckt, dass ich nur @sites verwenden und auf die drushrc-Datei verzichten kann .
Wenn Sie dies tun, wird "cc all" auf jeder meiner Sites in Reihe ausgeführt (einzeln).
Ich möchte dies auf die nächste Stufe nehmen und versuchen , diese Befehle auf allen Seiten laufen simulantiously . Ich habe etwas gelesen und habe den Eindruck, dass Drush dies tatsächlich unterstützt. Die Funktion drush_invoke_process () verwendet $ backend_options, die Folgendes enthalten können (aus der Funktionsdokumentation):
* 'invoke-multiple'
* If $site_alias_record represents a single site, then 'invoke-multiple'
* will cause the _same_ command with the _same_ arguments and options
* to be invoked concurrently (e.g. for running concurrent batch processes).
* 'concurrency'
* Limits the number of concurrent processes that will run at the same time.
* Defaults to '4'.
Was ich jedoch nicht herausfinden kann, ist, wie ich dies tatsächlich über die Drush-Befehlszeile verwende . Gibt es eine Option, die ich an Drush übergeben muss, oder muss ich etwas in einer Einstellungsdatei festlegen?
Jede Info wird sehr geschätzt - meine Neugier ist geweckt!
AKTUALISIEREN
Basierend auf den folgenden Antworten konnte ich einen einfachen Test erstellen, der Drushs Verhalten demonstriert, und einige Schlussfolgerungen ziehen:
Das Standardverhalten von Drush bei der Ausführung von Vorgängen an mehreren Standorten besteht darin, gleichzeitige Prozesse zu verwenden:
$ drush @localdev ev "drupal_set_message(time()); sleep(5);"
Continue? (y/n): y
site1 >> 1360512943 [status]
site2 >> 1360512943 [status]
site3 >> 1360512943 [status]
Dies gilt auch dann, wenn keine Aliase verwendet werden, und auch, wenn der in Drush integrierte Alias @sites verwendet wird. Diese beiden Befehle ergeben ein identisches Verhalten wie oben:
$ drush site1,site2,site3 ev "drupal_set_message(time()); sleep(5);"
$ drush @sites ev "drupal_set_message(time()); sleep(5);"
Um die Anzahl der gleichzeitigen Prozesse zu ändern (Standard ist 4), kann die Option '--concurrency = N' im Befehl drush übergeben werden. Wenn ich beispielsweise eine serielle Ausführung möchte, kann ich die Anzahl der gleichzeitigen Prozesse auf 1 setzen:
$ drush @localdev ev "drupal_set_message(time()); sleep(5);" --concurrency=1
Continue? (y/n): y
site1 >> 1360513387 [status]
site2 >> 1360513393 [status]
site3 >> 1360513399 [status]
quelle
Antworten:
Das hat bei mir funktioniert:
Ich bin mir nicht sicher, wie gleichzeitig es tatsächlich war; Die letzte Nachricht zu Site1 kam unmittelbar nach der ersten Nachricht für Site2, und alle anderen Nachrichten wurden nacheinander gedruckt. Ich habe nicht gemessen, inwieweit jede CC-Operation gleichzeitig ablief oder inwieweit das System möglicherweise nur an CPU oder E / A gebunden war, aber es schien nominell zu funktionieren.
quelle
@sites
Befehl zu tun . Ein Fehler dabei ist jedoch, dass der Befehl das Site-Verzeichnis nicht erkennt, wenn es sich um einen Symlink handelt. In meinem Fall ist der Symlink zu einem Verzeichnis außerhalb der Drupal-Wurzel, also gibtsite_dir -> ../../sites/site/src
ich Folgendes an: .. Vielleicht ist es ein Fehler, den ich beheben kann, wenn Sie mich auf den Code verweisen können, der für die Erstellung der Liste verantwortlich istFür eine einzelne Instanz (ohne Site-Liste):
Für Aliase mit Site-List-Array wird es sogar gleichzeitig ausgeführt ...
Lassen Sie uns nach den folgenden Kommentaren den Code für drush_invoke_process überprüfen:
//
- Mein Kommentar,/* ... */
- Verkürzung des bereitgestellten Codes.Als nächstes genannt:
Als nächstes wird aufgerufen:
quelle