Depuis drush 9 (exigence drupal 8.4), alias @sites ne semble plus être implémenté (ou encore?).
$ drush @sites cr
The alias @sites could not be found.
Est-ce un moyen d'obtenir le même comportement qui ne consiste pas à taper mon 300 alias dans un fichier de configuration?
En attendant quelque chose de similaire, j'ai écrit ce petit script que j'ai appelé "drall" que vous pouvez adapter:
#!/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;
}
}
Exemple d'utilisation:
$ ./drall cc render
Executing command `drush --uri=xxxxxxx cc render` on default
[success] 'render' cache was cleared.
J'espère qu'il y aura des comportements @sites plus tard, c'était utile.
Bien que de ce problème il ne ressemble pas à ça:
Drush 9 ne prend plus en charge l'exécution d'une seule commande sur plusieurs sites avec des listes d'alias (@ A, @ b, @ c) ou @sites. Aucune de ces syntaxes n'est disponible dans aucun contexte. Vous pouvez toujours utiliser drush sa @group pour voir tous les alias d'un groupe; c'est le seul contexte dans lequel Drush reconnaît les listes d'alias.
Je placerais simplement une boucle légère dans votre ~/.bashrc
Ou ~/.bash_profile
Ou là où vous préférez. Mettez simplement à jour le tableau SITES=( foo bar )
selon vos besoins.
Sourcez votre fichier bash, cd
dans votre racine multisite et appelez ddrush cim -y
par exemple et il parcourra tous les sites fournis dans le SITES
tableau.
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
}
Vous pouvez utiliser presque la même chose pour exécuter un script de déploiement. Ou vous pouvez facilement fournir plusieurs alias comme celui-ci. adrush
, bdrush
, cdrush
- un pour chaque environnement multisite à entretenir.
Je viens de lire que vous avez 300 instances en cours d'exécution. Le respect! Eh bien, il pourrait être plus facile de ne fournir qu'un chemin absolu vers le dossier sites et de le faire analyser puis boucler automatiquement.
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
}