Drush 9(Drupal 8.4要件)以降、エイリアス@sitesはもう実装されていないようです(またはまだ?)。
$ drush @sites cr
The alias @sites could not be found.
これは、設定ファイルに300のエイリアスを入力することと同じ動作をしない方法ですか?
同様のことを待って、私は「ドラル」と呼ぶこの小さなスクリプトを書きました。
#!/usr/bin/php
<?php
// Path to sites.php file.
include('web/sites/sites.php');
$done = [];
$argv = $_SERVER['argv'];
array_shift($_SERVER['argv']);
$parameters = implode(' ', $_SERVER['argv']);
$commandPattern = "drush --uri=:key $parameters";
foreach ($sites as $key => $site) {
if (count($argv) > 1 && !in_array($site, $done)) {
$command = str_replace(':key', $key, $commandPattern);
echo "Executing command `$command` on $site\n";
`$command`;
$done[] = $site;
}
}
使用例:
$ ./drall cc render
Executing command `drush --uri=xxxxxxx cc render` on default
[success] 'render' cache was cleared.
@sitesの動作が後で役立つことを願っています。
この問題 からではありますが、それはそのようには見えません:
Drush 9は、エイリアスリスト(@ A、@ b、@ c)または@sitesを持つ複数のサイトでの単一コマンドの実行をサポートしなくなりました。これらの構文はいずれも、どのコンテキストでも使用できません。グループ内のすべてのエイリアスを表示するには、drush sa @groupを引き続き使用できます。これは、Drushがエイリアスリストを認識する唯一のコンテキストです。
私は単純に_~/.bashrc
_または_~/.bash_profile
_または好きな場所に軽量ループを配置します。 SITES=( foo bar )
配列を必要に応じて更新するだけです。
Bashファイルcd
をマルチサイトルートにソースし、たとえば_ddrush cim -y
_を呼び出すと、SITES
配列で提供されるすべてのサイトを反復処理します。
_ddrush () {
# Provide an array of sites you want to loop.
SITES=( foo bar )
# Validate and hint if no argument provided.
if [ "${#}" -eq 0 ]; then
echo "- ddrush: missing argument(s)"
echo "EXAMPLE: ddrush cex -y"
else
# Loop:
for SITE in "${SITES[@]}"; do
echo "drush -l ${SITE} ${@}"
drush -l "${SITE}" "${@}"
done
fi
}
_
配備スクリプトの実行にもほぼ同じように使用できます。または、そのような複数のエイリアスを簡単に提供できます。 adrush
、bdrush
、cdrush
–維持する必要があるすべてのマルチサイト環境に1つ。
たった今、300個のインスタンスが実行されていることを確認しました。尊敬!それでは、sitesフォルダーへの絶対パスのみを指定し、それをスキャンしてから自動的にループさせる方が簡単な場合があります。
_xdrush () {
# Provide the absolute path to the sites directory.
SITES="/var/www/MYMULTISITE/sites"
# Validate and hint if no argument provided.
if [ "${#}" -eq 0 ]; then
echo "- xdrush: missing argument(s)"
echo "EXAMPLE: xdrush cex -y"
else
PWD=${PWD}
cd "${SITES}"
# Loop:
for SITE in $(ls -d */ | cut -f1 -d'/'); do
# Skip default site.
if [ ! "${SITE}" == "default" ]; then
cd "${PWD}"
echo "drush -l ${SITE} ${@}"
drush -l "${SITE}" "${@}"
fi
done
fi
}
_