Projet

Général

Profil

Drush » Historique » Version 31

Julien Enselme, 28/03/2015 12:01

1 27 Julien Enselme
{{important(Si vous *modifiez les fichiers de configuration de drush*, pensez à vider les caches avec _drush cache-clear drush_)}}
2 2 Julien Enselme
3 1 Julien Enselme
{{>toc}}
4 20 Julien Enselme
5 20 Julien Enselme
h1. C'est quoi ?
6 1 Julien Enselme
7 1 Julien Enselme
Drush signifie _drupal shell_. C'est un utilitaire disponible sur nos installations afin d'administrer nos sites en ligne de commande.
8 1 Julien Enselme
9 1 Julien Enselme
Pour avoir la liste des commandes les plus simples, taper drush dans un terminal, ou consulter cette http://drupal.org/node/477684.
10 1 Julien Enselme
11 1 Julien Enselme
Pour effectuer une action, il faut au préalable se placer dans le dossier du site concerné, puis taper la commande drush.
12 1 Julien Enselme
13 9 Julien Enselme
h1. Quelques exemples simples
14 1 Julien Enselme
15 1 Julien Enselme
* activer le module ou le thème nommé projet : <code>drush en projet</code>
16 1 Julien Enselme
* désactiver le module ou le thème nommé projet <code>drush dis projet </code>
17 1 Julien Enselme
* lister les modules et les thèmes, leurs statuts (activé, désactivé, pas installé), et leurs versions <code>drush pml </code>
18 1 Julien Enselme
* désinstaller le module ou le thème nommé projet <code>drush pm-uninstall projet </code>
19 1 Julien Enselme
20 1 Julien Enselme
**Rappel :** désinstaller un projet = le désactiver + supprimer les tables de ce projet dans la base de données
21 1 Julien Enselme
22 1 Julien Enselme
* récupérer la valeur actuelle de la variable nommée ma_variable <code>drush vget ma_variable </code>
23 1 Julien Enselme
* modifier la valeur de _ma_variable_ en _nvelle_valeur_ <code>drush vset ma_variable nvelle_valeur </code>
24 1 Julien Enselme
25 1 Julien Enselme
NB : une variable est un champ de la table monsite_variables (dans la base de données).
26 1 Julien Enselme
On peut citer par exemple _theme_default_ le thème par défaut du site ou _admin_theme_ le thème de l'administration.
27 1 Julien Enselme
28 1 Julien Enselme
* vider tous les caches <code>drush cc all</code> 
29 1 Julien Enselme
30 9 Julien Enselme
h1. Gérer les utilisateurs
31 1 Julien Enselme
32 9 Julien Enselme
h2. Savoir qui administre un site
33 1 Julien Enselme
34 1 Julien Enselme
**À partir de drupal 7**
35 1 Julien Enselme
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 !)
36 1 Julien Enselme
<pre>
37 1 Julien Enselme
<code>
38 15 Julien Enselme
drush sqlq  "SELECT name, mail FROM users WHERE uid IN (SELECT uid FROM users_roles WHERE rid=3);"
39 15 Julien Enselme
</code>
40 15 Julien Enselme
</pre>
41 15 Julien Enselme
42 15 Julien Enselme
Si le site à un préfix (en cours de disparition) :
43 15 Julien Enselme
<pre>
44 15 Julien Enselme
<code>
45 1 Julien Enselme
drush sqlq  "SELECT name, mail FROM nomdusite_users WHERE uid IN (SELECT uid FROM nomdusite_users_roles WHERE rid=3);"
46 1 Julien Enselme
</code>
47 1 Julien Enselme
</pre>
48 1 Julien Enselme
49 9 Julien Enselme
h2. Obtenir des informations sur un utilisateur
50 1 Julien Enselme
51 1 Julien Enselme
Retourne, pour un login donné, l'uid, l'adresse mail, les rôles et le statut.
52 1 Julien Enselme
<pre>
53 1 Julien Enselme
<code>drush uinf mon_utilisateur</code>
54 1 Julien Enselme
</pre>
55 1 Julien Enselme
56 9 Julien Enselme
h2. Changer le mot de passe d'un utilisateur
57 1 Julien Enselme
58 1 Julien Enselme
Uniquement si problème de passation au niveau de l'administration d'un site, et sur demande explicite de celui-ci.
59 1 Julien Enselme
<pre>
60 1 Julien Enselme
<code>
61 1 Julien Enselme
drush upwd mon_utilisateur --password="mon_nvo_mot-de-passe"
62 1 Julien Enselme
</code>
63 1 Julien Enselme
</pre>
64 1 Julien Enselme
65 9 Julien Enselme
h2. Changer les rôles d'un utilisateur
66 1 Julien Enselme
67 1 Julien Enselme
Idem, uniquement sur demande explicite de celui-ci !
68 1 Julien Enselme
69 28 Julien Enselme
* Donne le rôle "administrator" à l'utilisateur mon_utilisateur : <code> drush urol "administrator" mon_utilisateur  </code>
70 28 Julien Enselme
* Retire le rôle "administrator" à l'utilisateur mon_utilisateur : <code> drush urrol "administrator" mon_utilisateur  </code>
71 1 Julien Enselme
72 6 Julien Enselme
Pour devenir temporairement administrateur sur un site ou permettre à l’utilisateur d’id 1 de changer son mot de passe : <code>drush uli</code>. Cette commande retourne un lien à copier/coller dans son navigateur.
73 6 Julien Enselme
74 16 Julien Enselme
h1. Manipulation des bases de données
75 16 Julien Enselme
76 16 Julien Enselme
h2. Sauvegarder une base de données
77 16 Julien Enselme
78 16 Julien Enselme
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.
79 16 Julien Enselme
80 16 Julien Enselme
h2. Revenir sur une mise à jour qui a échoué
81 1 Julien Enselme
82 1 Julien Enselme
Pour revenir sur une mise à jour, il faut rétablir la base de données telle qu'elle était avant la mise à jour.
83 1 Julien Enselme
Cela suppose évidemment d'avoir fait une sauvegarde de la base de donnée avant :p
84 1 Julien Enselme
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 ^^
85 1 Julien Enselme
86 1 Julien Enselme
<pre>
87 1 Julien Enselme
<code>
88 1 Julien Enselme
drush sqlq < ~/sauvegardes/12345.sql
89 1 Julien Enselme
</code>
90 1 Julien Enselme
</pre>
91 1 Julien Enselme
92 1 Julien Enselme
C'est l'équivalent sql de :
93 1 Julien Enselme
<pre>
94 1 Julien Enselme
<code>
95 1 Julien Enselme
 mysql -h localhost -u root -p mabase < ~/sauvegardes/12345.sql 
96 1 Julien Enselme
</code>
97 1 Julien Enselme
</pre>
98 1 Julien Enselme
99 1 Julien Enselme
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
100 1 Julien Enselme
101 1 Julien Enselme
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.
102 1 Julien Enselme
103 9 Julien Enselme
h1. Les alias drush
104 1 Julien Enselme
105 9 Julien Enselme
h2. Les alias de sites
106 1 Julien Enselme
107 9 Julien Enselme
h3. Généralités
108 7 Julien Enselme
109 7 Julien Enselme
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 :
110 1 Julien Enselme
<pre>
111 1 Julien Enselme
<code>
112 1 Julien Enselme
drush @monsite status
113 1 Julien Enselme
</code>
114 1 Julien Enselme
</pre>
115 1 Julien Enselme
116 7 Julien Enselme
Pour connaître la liste de tous les alias et leur syntaxe exacte, lancer <code>drush sa</code> dans le dossier des sites.
117 1 Julien Enselme
118 30 Julien Enselme
NB : l'alias <code>drush @sites</code> 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.
119 1 Julien Enselme
120 9 Julien Enselme
h3. Mettre en place ses alias de script pour des sites locaux
121 8 Julien Enselme
122 8 Julien Enselme
@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) :
123 8 Julien Enselme
<pre>
124 8 Julien Enselme
<code class="php">
125 8 Julien Enselme
<?php
126 8 Julien Enselme
127 8 Julien Enselme
$aliases['toto'] = array(
128 8 Julien Enselme
'uri' => 'toto.local',
129 8 Julien Enselme
'root' => '/var/www/local',
130 8 Julien Enselme
);
131 8 Julien Enselme
</code>
132 8 Julien Enselme
</pre>
133 8 Julien Enselme
134 1 Julien Enselme
Vous pouvez désormais appliquer une commande sur toto en utilisant <code>drush @toto CMD</code>.
135 8 Julien Enselme
136 9 Julien Enselme
h3. Mettre en place ses alias de script pour des sites distants
137 8 Julien Enselme
138 1 Julien Enselme
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) :
139 8 Julien Enselme
140 8 Julien Enselme
<pre>
141 8 Julien Enselme
<code class="php">
142 8 Julien Enselme
$aliases['sitedistant'] = array(
143 8 Julien Enselme
'uri' => 'assos.centrale-marseille.fr',
144 31 Julien Enselme
'root' => '/users/guest/assos/drupal7',
145 8 Julien Enselme
'remote-user' => 'assos',
146 31 Julien Enselme
'remote-host' => 'webassos.ec-m.fr',
147 8 Julien Enselme
);
148 8 Julien Enselme
</code>
149 8 Julien Enselme
</pre>
150 8 Julien Enselme
151 13 Julien Enselme
{{important(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))}}
152 13 Julien Enselme
153 9 Julien Enselme
h2. Les alias de scripts
154 1 Julien Enselme
155 23 Julien Enselme
{{warning(*À 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.)}}
156 21 Julien Enselme
157 17 Florent Torregrosa
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.
158 17 Florent Torregrosa
159 10 Julien Enselme
h1. Les commandes pour dupliquer un site
160 10 Julien Enselme
161 10 Julien Enselme
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 :
162 24 Florent Torregrosa
* <code>drush -y rsync @${site}2:%files @${site}:%files</code> 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_.
163 11 Julien Enselme
* <code>drush -y sql-sync  @${site}2 @${site}</code> pour dupliquer la base de données.
164 10 Julien Enselme
165 9 Julien Enselme
h1. Agir sur tous les sites d'un coup
166 1 Julien Enselme
167 25 Florent Torregrosa
Pour administrer tous les sites du multi-site en une seule fois, nous avons créé le script [[Scripts_et_taches_planifiees#d7-all-drushsh|d7-all-drush.sh]].
168 25 Florent Torregrosa
169 25 Florent Torregrosa
h1. Commandes Drush diverses
170 25 Florent Torregrosa
171 25 Florent Torregrosa
<pre>
172 25 Florent Torregrosa
<code>
173 25 Florent Torregrosa
drush pml | grep "^ Core" -v | grep "Enabled" | wc -l
174 25 Florent Torregrosa
</code>
175 25 Florent Torregrosa
</pre>
176 25 Florent Torregrosa
Pour compter le nombre de modules non-core activés.
177 26 Florent Torregrosa
178 26 Florent Torregrosa
h1. Plus de commandes Drush
179 26 Florent Torregrosa
180 26 Florent Torregrosa
* http://drush.ws/
181 26 Florent Torregrosa
* http://www.drushcommands.com/