Projet

Général

Profil

Si vous modifiez les fichiers de configuration de drush, pensez à vider les caches avec drush cache-clear drush

C'est quoi ?

Drush signifie drupal shell. C'est un utilitaire disponible sur nos installations afin d'administrer nos sites en ligne de commande.

Pour avoir la liste des commandes les plus simples, taper drush dans un terminal, ou consulter cette http://drupal.org/node/477684.

Pour effectuer une action, il faut au préalable se placer dans le dossier du site concerné, puis taper la commande drush.

Quelques exemples simples

  • activer le module ou le thème nommé projet : drush en projet
  • désactiver le module ou le thème nommé projet drush dis projet
  • lister les modules et les thèmes, leurs statuts (activé, désactivé, pas installé), et leurs versions drush pml
  • désinstaller le module ou le thème nommé projet drush pm-uninstall projet

Rappel : désinstaller un projet = le désactiver + supprimer les tables de ce projet dans la base de données

  • récupérer la valeur actuelle de la variable nommée ma_variable drush vget ma_variable
  • modifier la valeur de ma_variable en nvelle_valeur drush vset ma_variable nvelle_valeur

NB : une variable est un champ de la table monsite_variables (dans la base de données).
On peut citer par exemple theme_default le thème par défaut du site ou admin_theme le thème de l'administration.

  • vider tous les caches drush cc all

Gérer les utilisateurs

Savoir qui administre un site

À partir de drupal 7
Cette commande permet de chercher dans la base de données les utilisateurs qui ont le rid numéro 3 (qui correspond au rôle d'administrateur (toujours) dans D7 à moins d'aller exprès dans la bdd le changer !)

<code>
drush sqlq  "SELECT name, mail FROM users WHERE uid IN (SELECT uid FROM users_roles WHERE rid=3);"
</code>

Si le site à un préfix (en cours de disparition) :

<code>
drush sqlq  "SELECT name, mail FROM nomdusite_users WHERE uid IN (SELECT uid FROM nomdusite_users_roles WHERE rid=3);"
</code>

Obtenir des informations sur un utilisateur

Retourne, pour un login donné, l'uid, l'adresse mail, les rôles et le statut.

<code>drush uinf mon_utilisateur</code>

Changer le mot de passe d'un utilisateur

Uniquement si problème de passation au niveau de l'administration d'un site, et sur demande explicite de celui-ci.

<code>
drush upwd mon_utilisateur --password="mon_nvo_mot-de-passe"
</code>

Changer les rôles d'un utilisateur

Idem, uniquement sur demande explicite de celui-ci !

  • Donne le rôle "administrator" à l'utilisateur mon_utilisateur : drush urol "administrator" mon_utilisateur
  • Retire le rôle "administrator" à l'utilisateur mon_utilisateur : drush urrol "administrator" mon_utilisateur

Si le changement est définitif, il faut mettre à jour default et si besoin ajouter le webmaster à la liste webmasters.

Pour devenir temporairement administrateur sur un site ou permettre à l’utilisateur d’id 1 de changer son mot de passe : drush @alias uli. Cette commande retourne un lien à copier/coller dans son navigateur.

Manipulation des bases de données

Sauvegarder une base de données

Pour les sites drupal 7 qui sont dans leur base de données, utiliser la commande drush sql-dump --result-file="FICHIER". Par défaut, cette commande affiche la base de données dans le terminal.

Revenir sur une mise à jour qui a échoué

Pour revenir sur une mise à jour, il faut rétablir la base de données telle qu'elle était avant la mise à jour.
Cela suppose évidemment d'avoir fait une sauvegarde de la base de donnée avant :p
Dans le cas d'une grosse base de données comme la notre, phpmyadmin n'est pas une solution viable, il faut donc utiliser directement le sql en ligne de commande ou drush, bien entendu

<code>
drush sqlq < ~/sauvegardes/12345.sql
</code>

C'est l'équivalent sql de :

<code>
 mysql -h localhost -u root -p mabase < ~/sauvegardes/12345.sql 
</code>

Explications : je me connecte au serveur localhost avec le nom d'utilisateur root et je veux écraser la base de donnée mabase en y injectant le code sql généré par ma sauvegarde dans le fichier ~/sauvegardes/12345.sql

NB : Pour écraser une base, assurez-vous d'avoir des "CREATE TABLE IF NOT EXISTS" dans le fichier de sauvegardes et non seulement "CREATE TABLE". Dans ce dernier cas, il faut supprimer les tables de la bdd avant d'injecter les fichiers sql.

Les alias drush

Les alias de sites

Généralités

Les alias de sites permettent de lancer une commande drush sans être dans le dossier du site, en précisant le nom du site via un alias de la manière suivante :

<code>
drush @monsite status
</code>

Pour connaître la liste de tous les alias et leur syntaxe exacte, lancer drush sa dans le dossier des sites.

NB : l'alias drush @sites permet de lancer la commande drush sur chacun des sites, et effectue une action similaire à source:bin/d7-all-drush.sh sans pour autant le remplacer… Sur certaines actions nécessitant beaucoup de mémoire, l'utilisation de l'alias peut faire dépasser la mémoire maximale autorisé à drush.

Mettre en place ses alias de script pour des sites locaux

drush crée dans le répertoire de l’utilisateur un dossier .drush qui contient les fichiers de configuration de drush. Pour activer les alias drush, créer dans ce dossier un fichier aliases.drushrc.php et placez-y les instructions suivantes (à adapter à votre configuration) :

<code class="php">
<?php

$aliases['toto'] = array(
'uri' => 'toto.local',
'root' => '/var/www/local',
);
</code>

Vous pouvez désormais appliquer une commande sur toto en utilisant drush @toto CMD.

Mettre en place ses alias de script pour des sites distants

Marre de devoir vous connecter sur la machine où votre drupal est installé ? Alors les alias distants sont fait pour vous. Il vous permette depuis votre machine local d’administrer les sites installés sur une autre machine. Utiliser une clé ssh semble tout à fait adapter pour ne pas avoir à taper le mot de passe tout le temps. Pour cela, dans le fichier ~/.drush/aliases.drushrc.php entrer le code suivant (donné en exemple pour assos) :

<code class="php">
$aliases['sitedistant'] = array(
'uri' => 'assos.centrale-marseille.fr',
'root' => '/users/guest/assos/drupal7',
'remote-user' => 'assos',
'remote-host' => 'webassos.ec-m.fr',
);
</code>

Il ne faut surtout pas mettre le chemin du dossier du site avec la clé root, sinon les commandes drush distantes ne fonctionnent pas (même si c’est tentant car facilite la synchronisation des fichiers)

Les alias de scripts

À ne plus utiliser : il a été décidé de ne plus passer par les alias de scripts mais de faire des scripts à la place afin d'uniformiser la manière d'entretenir l'installation multi-assos. Les alias de script du club drupal ont donc été abandonnés.

Il est également possible de créer des commandes drush personnalisées en utilisant les alias. On peut alors regrouper plusieurs actions souvent effectuées à la suite, voire même des scripts entiers, dans une commande drush.

Les commandes pour dupliquer un site

Drush est tout à fait capable de répliquer un site distant sur votre machine ou un site local sur une machine distante. Il faut avoir paramétré les alias drush avant. Pour cela, il suffit d’utiliser les commandes suivantes :

  • drush -y rsync ${site}2:%files${site}:%files pour synchroniser les fichiers. Visiblement tenter de synchroniser autre chose (l’arbre complet par exemple) n’est pas possible. Il est préférable d’utiliser du rsync classique. Si vous synchroniser sur un site local, les fichiers seront bien dans sites mais le dossier s’appellera files. Si le est omis, les fichiers seront dans sites/files/files.
  • drush -y sql-sync ${site}2${site} pour dupliquer la base de données.

Agir sur tous les sites d'un coup

Pour administrer tous les sites du multi-site en une seule fois, nous avons créé le script d7-all-drush.sh.

Commandes Drush diverses

<code>
drush pml | grep "^ Core" -v | grep "Enabled" | wc -l
</code>

Pour compter le nombre de modules non-core activés.

Plus de commandes Drush