Używam wielu witryn Drupal (pojedyncza baza kodów, wiele witryn / *). Wraz z tym zacząłem używać aliasów Drusha do zarządzania nimi:
$ cat sites/all/drush/aliases.drushrc.php
<?php
$aliases['localdev'] = array(
'site-list' => array(
'site1',
'site2',
'site3',
),
);
?>
To pozwala mi łatwo wykonywać działania na wszystkich stronach:
$ drush @localdev cc all
>> Właśnie odkryłem, że mogę po prostu używać @sites i zrezygnować z pliku drushrc .
Wykonanie tego spowoduje wykonanie polecenia „cc all” na każdej z moich witryn w serii (pojedynczo).
Chciałbym wziąć to do następnego poziomu i spróbuj uruchomić te polecenia na wszystkich stronach simulantiously . Robiłem kilka czytania i jestem pod wrażeniem, że Drush ma rzeczywiście wspierać. Funkcja drush_invoke_process () pobiera $ backend_options, które mogą zawierać (z dokumentacji funkcji):
* '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'.
Nie potrafię jednak rozgryźć , w jaki sposób faktycznie używam tego z wiersza poleceń Drush . Czy jest jakaś opcja, którą muszę przekazać Drushowi, czy też muszę ustawić coś w pliku ustawień?
Wszelkie informacje będą mile widziane - moja ciekawość jest rozbudzona!
AKTUALIZACJA
Na podstawie poniższych odpowiedzi udało mi się stworzyć prosty test, który demonstruje zachowanie Drusha i wyciągnąć kilka wniosków:
Domyślnym zachowaniem Drusha podczas wykonywania operacji na wielu witrynach jest używanie współbieżnych procesów:
$ drush @localdev ev "drupal_set_message(time()); sleep(5);"
Continue? (y/n): y
site1 >> 1360512943 [status]
site2 >> 1360512943 [status]
site3 >> 1360512943 [status]
Dzieje się tak nawet wtedy, gdy nie używasz aliasów, i dotyczy to także korzystania z wbudowanego aliasu @ Witryny Drusha. Te dwa polecenia dają identyczne zachowanie jak powyżej:
$ drush site1,site2,site3 ev "drupal_set_message(time()); sleep(5);"
$ drush @sites ev "drupal_set_message(time()); sleep(5);"
Aby zmienić liczbę współbieżnych procesów (domyślnie jest to 4), opcję „--concurrency = N” można przekazać w poleceniu drush. Na przykład, jeśli chcę wykonać szeregowo, mogę ustawić liczbę równoczesnych procesów na 1:
$ drush @localdev ev "drupal_set_message(time()); sleep(5);" --concurrency=1
Continue? (y/n): y
site1 >> 1360513387 [status]
site2 >> 1360513393 [status]
site3 >> 1360513399 [status]