web-dev-qa-db-fra.com

Utiliser Drush pour mettre à jour la configuration multisite

J'ai une configuration multi-sites où 3 sites différents partagent la même base de code. Tous les modules sont dans le all/modules pour qu'ils aient tous exactement les mêmes modules. Je veux mettre à jour les modules et le noyau de la base de code avec drush mais je ne trouve pas de moyen de le faire.

Il n'y a pas settings.php fichier dans sites/default so drush génère une erreur. Dois-je simplement créer une base de données factice pour que drush puisse connecter et mettre à jour les modules? Évidemment, je vais devoir exécuter update.php sur les sites après les mises à jour.

Les bases de données sont séparées, elles partagent juste les modules et le noyau.

3
jsheffers

Au lieu d'appliquer les mises à jour à chaque site individuel en utilisant @sites qui n'a jamais fonctionné, j'ai pu y parvenir en exécutant les mises à jour sur un site spécifique. Voici le code qui a fonctionné pour moi:

drush -l example.com pm-update

example.com étant le nom de mon lien symbolique. Note latérale: je n'ai pas eu à créer d'alias de drush pour que cela fonctionne.

6
jsheffers

C'est en PHP, mais c'est ce que j'utilise depuis mon dossier sites.

Exemple d'utilisation à partir de la ligne de commande:

cd /path/to/drupal/sites
php drush_updates.php

Le fichier:

<?php    
/**
 * Run db updates on all of the sites in the multisite, using Drush
 */    
print "\n\n***************************************************\n";
print "This script will find all of the site dirs and run drush updb -y on them.\n\n";

$start_dir = ".";
$files = scandir($start_dir);

foreach ($files as $file) {

  if (is_dir($file) && $file != "." && $file != ".." && $file != "all") {
    print "drush updb -y on $file...\n";      
    chdir($file);        
    system("drush updb -y");
    chdir("..");
  }
}

print "\n\n*******************************************\n";
print "Finished!\n\n";    
?>
0
Richard

Voici ce que je fais pour mettre à jour une configuration multi-sites:

for d in sites/*; do pushd $d; drush up -y; popd; done
0
kqw

Avez-vous 3 différents sites/sitename.com/ répertoires? Si c'est le cas, vous voudrez cd dans chacun d'eux un à la fois et exécutez drush up dans chaque.

La première fois que vous l'exécuterez, il téléchargera les nouveaux modules et exécutera les crochets de mise à jour sur la base de données de ce site et les deux prochaines fois, il verra qu'ils sont déjà téléchargés, il exécutera simplement les crochets de mise à jour sur les bases de données des deux autres sites. .

0
Mike Crittenden

J'ai une configuration similaire - plusieurs sites utilisant la même base de code et différentes bases de données. J'utilise un script Shell pour exécuter la même commande drush sur chaque site. Le script est ci-dessous - il est personnalisé en fonction de la configuration de mon serveur. Les bits pertinents sont:

Mon Drupal est/var/www/drupal7

Chaque site (dans drupal7/sites) contient ".d7". dans le nom.

Le script ci-dessous (appelé d7_all_sites) peut exécuter 3 commandes drush sur chacun de mes sites: effacer tous les caches, mettre les sites en/hors mode maintenance et mettre à jour la base de données. La commande est donnée par un paramètre. Donc, quand je mets à jour des modules, je fais ça ...

$ d7_all_sites mm 1 ## puts all sites into maintenance mode
$ drush up ## updates the modules
$ d7_all_sites updb ## updates each site's DB schema
$ d7_all_sites mm 0 ## takes all sites out of maintenance mode

Je suis un novice en scripting, donc toute suggestion pour améliorer le script est la bienvenue.

#!/bin/bash
# test that at least one parameter if given, else return error message & exit
if [ $# -eq 0 ]
then
echo -e "\n  You must supply a valid parameter ...\n    cc to clear caches.\n    mm [0 or 1] for maintenance mode (0=online, 1=offline).\n    updb to update databases.\n"
exit 2
fi
## clear all caches command
if [ $1 = "cc" ]
then
for SITE in `ls /var/www/drupal7/sites | grep ".d7."`;
do
echo
echo Clearing caches on $SITE ...
drush --uri=$SITE --root=/var/www/drupal7 cache-clear all
done
exit 0
fi
## maintenance mode
if [ $1 = "mm" ]
then
if [ $# -ne 2 ]
then
echo -e "\n  You must supply a parameter ...\n    0 for online.\n    1 for offline.\n"
exit 2
else
if [ $2 -eq 0 ]
then
text="online ..."
else
if [ $2 -eq 1 ]
then
text="offline ..."
echo -e "\n  You must supply a parameter ...\n    0 for online.\n    1 for offline.\n"
exit 2
fi
fi
fi
for SITE in `ls /var/www/drupal7/sites | grep ".d7."`;
do
echo 
echo Putting $SITE $text
drush --uri=$SITE --root=/var/www/drupal7 vset --exact --yes maintenance_mode $2
done
exit 0
fi
# update databases
if [ $1 = "updb" ]
then
for SITE in `ls /var/www/drupal7/sites | grep ".d7."`;
do
echo
echo Checking $SITE for database updates ...
drush --uri=$SITE --root=/var/www/drupal7 --yes updatedb
done
exit 0
fi
# if no commands have been run, return an error message
echo -e "\n  You must supply a valid parameter ...\n    cc to clear caches.\n    mm [0 or 1] for maintenance mode (0=online, 1=offline).\n    updb to update databases.\n"
0
penguin