web-dev-qa-db-ja.com

Drush 9ではDrush @sitesは実装されていません

Drush 9(Drupal 8.4要件)以降、エイリアス@sitesはもう実装されていないようです(またはまだ?)。

$ drush @sites cr
The alias @sites could not be found.

これは、設定ファイルに300のエイリアスを入力することと同じ動作をしない方法ですか?

6
Oulalahakabu

同様のことを待って、私は「ドラル」と呼ぶこの小さなスクリプトを書きました。

#!/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がエイリアスリストを認識する唯一のコンテキストです。

3
Oulalahakabu

私は単純に_~/.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
}
_

配備スクリプトの実行にもほぼ同じように使用できます。または、そのような複数のエイリアスを簡単に提供できます。 adrushbdrushcdrush –維持する必要があるすべてのマルチサイト環境に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
}
_
2
leymannx