Drush

Quoi de neuf dans Drush 5 ?

Durant la DrupalCon Denver cette semaine a eu lieu une conférence par Moshe Weitzman, Jonathan Hedstrom, Owen Barton et Mark Sonnabaum. À l'issue de celle-ci devait être releasée la version 5 stable de Drush (je suis peut-être un peu en avance sur ceci).

Drush est votre ami, si vous êtes un développeur, vous devez forcément l'avoir installé, et je vais donc partir du principe que vous avez utilisé la version 4. Je vais vous présenter dans cet article les nouvelles fonctionnalités de la version 5.

Emplacement de configuration

Les configurations, au travers de fichiers drushrc.php, peuvent maintenant être placées à plusieurs endroits :

  • Relatif à l'utilisateur unix : ~/.drush/drushrc.php
  • Relatif au site Drupal : sites/{default|example.com}/drushrc.php
  • Relatif au système/serveur : /etc/drush/drushrc.php

Alias shell

Vous pouvez maintenant fournir vos propres alias de commandes Drush dans la configuration, exemple :

1
2
3
4
$options['shell-aliases'] => array(
  'pull' => '!git pull',
  'pulldb' => '!git pull && drush updatedb',
);

Vous pouvez donc renseigner des commandes drush mais aussi des commandes système tel que git ou rm.

Gestion des options

Les options non reconnues renvoient maintenant une erreur, plus de "Mais pourquoi ma commande n'a pas marché ?", les erreurs de syntaxe sont ainsi plus facilement évitées.

L'aide des commandes Drush a adopté uniformément une syntaxe pour les paramètres des options :

  • --option=<valeur> pour les paramètres obligatoires
  • --option=[valeur] pour les paramètres optionnels

Compatibilité Windows

Enfin ! Oui, ils ont fait du bon boulot... Sponsorisés par Microsoft en personne, un installer est maintenant dispo, et plus (forcément) besoin de cygwin.

Tracking

Il est maintenant possible de garder un log des commandes utilisées, celles-ci peuvent être anonymisées et envoyées à MongoLab (sponsor des développeurs de Drush) pour faire évoluer Drush dans la bonne voie.
Ceci peut également être utilisé par les sysadmins pour garder un œil sur ce que font les développeurs.
Cette option est désactivée par défaut.

Drush make

Le célèbre gestionnaire de paquet s'invite dans le core de Drush, il est dès à présent possible de créer ses fichiers .make out-of-the-box pour installer ses modules et thèmes préférés toujours plus vite.
Ce n'est pas tout, les différents téléchargements sont maintenant réalisés en parallèle (4 processus par défaut), pour toujours plus de rapidité !
D'ailleurs si vous ne le saviez pas, il existe un cache dans Drush qui permet de récupérer les tarball déjà dans le système au lieu de toujours aller les chercher sur le réseau.

Autocomplétion

Oui, mesdames et messieurs ! L'autocomplétion des alias de sites, des commandes, des alias de shell, des options et des modules est maintenant disponible. Une gestion des contextes permet de ne pas être surchargés par toutes les possibilités. Je vous invite à le tester à l'usage ou à regarder la vidéo pour en savoir plus.
Pour l'activer il suffit de copier/coller drush.complete.sh vers /etc/bash_completion.d, ou, si vous n'avez pas les droits, il suffit d'inclure un petit bout de code dans votre ~/.bashrc

Certaines options vous permettent même de vous passer du mot-clé drush en début de commande, exemple :
@monsite dl views

Built-in WebServer

Drush propose maintenant un serveur HTTP léger afin d'exécuter vos sites Drupal. "À quoi cela sert" me direz-vous, et bien si vous voulez tester une configuration Drupal sans vous embêter avec les VHosts d'Apache, cette commande est très utile. Outre le fait d'afficher les logs d'accès aux pages, elle affiche également les messages watchdog.
Ainsi, la commande drush run-server :8889/ ouvrira une page dans votre navigateur vers le site Drupal courant. Ceci requiert php-cgi et PHP 5.3

Ce n'est pas tout, on peut maintenant faire du Drupal jetable avec la commande quick-drupal. C'est parfait si vous voulez épater Marcel et son site Joomla en quelques secondes :
cd /tmp
drush quick-drupal

Cela télécharge un Drupal 7, crée une base SQLite (donc dans un fichier), et installe le profil d'installation standard. Vous pouvez ensuite jouer avec les très nombreuses options :
drush qd "Ma boutique" --core=commerce_kickstart --profile=commerce_kickstart --yes --watchdog (Marcel va avoir une attaque après celle-ci)

Si vous n'en avez plus besoin, rm -r du dossier, au revoir.

Je l'avoue, j'ai applaudi tout seul chez moi là...

Queue API

Il semblerait que le fonctionnement de la nouvelle Queue API de Drupal 7 soit un peu trop cachée et éxécutable dans le cron, Drush résout maintenant ce problème avec deux commandes :

  • drush queue-list liste toutes les queues recensées par les modules
  • drush queue-run exécute ces queues

Multisites

Pour les gens qui bossent sur les multisites, il peut être frustrant de ne pas exécuter la commande dans le bon site ou même que celle-ci s'exécute dans sites/default, Drush 5 fournit les commandes drush site-set et drush site-reset pour que ce paramètre devienne persistant.

Beaucoup de nouveautés, et de taille ! Un conseil personnel, pour bénéficier des dernières fonctionnalités de Drush au jour le jour, clonez le dépôt directement. Celles-ci présentent encore quelques bugs et ils semblerait que les développeurs n'ont pas pu sortir la version stable à temps. Bravo à eux quand même !

"We'll see you on the command line" — Moshe Weitzman

La vidéo de la présentation est disponible ici.

Migration du blog sous Drupal 7

Ça fait quelques soirées que je suis dessus maintenant, je me suis amusé à passer ce blog sous Drupal 7, et voici mes premières conclusions :

Les Moins

Beaucoup de modules ne sont pas encore disponibles

Malgré la #D7CX, beaucoup de modules ne sont pas encore portés même en release de développement. Alors vous allez me dire "Arrête de te plaindre !"... et oui, faut que j'arrête de me plaindre, car selon les anciens (oui je suis un petit jeune arrivé quand Drupal était en 6.9 smiley) c'était bien pire lors du passage de D5 à D6.
Donc on peut finalement dire que les modules les plus importants et les plus utilisés sont présents, parfois en bêta et un peu buggés mais les dev sont réactifs.

Je compte dans les absents qui m'ont étonné : 

Beaucoup d'entre eux sont encore dans le foetus git ou dans des patchs dans les issues mais ils ne devraient pas tarder.

La majeure parties des modules sont en dev

Sur les 33 modules tiers que j'ai activé, 9 sont en dev et 13 ont une release stable.

En voici la preuve :

blog@sebcorbin:~/public_html$ drush pml --status="enabled" --no-core --type="module"
Package         Nom                                                     Version        
 Administration  Administration Development tools (admin_devel)          7.x-3.0-rc1    
 Administration  Administration menu (admin_menu)                        7.x-3.0-rc1    
 Administration  Administration menu Toolbar style (admin_menu_toolbar)  7.x-3.0-rc1    
 Development     Devel (devel)                                           7.x-1.0        
 Filters         GeSHi Filter (geshifilter)                              7.x-1.x-dev    
 Mail            HTML Mail (htmlmail)                                    7.x-1.x-dev    
 Media           IMCE (imce)                                             7.x-1.2        
 Mobile          Mobile Tools (mobile_tools)                             7.x-2.x-dev    
 Multilanguage   Language icons (languageicons)                          7.x-1.0-alpha1 
 Multilanguage   Locale updater (l10n_update)                            7.x-1.0-alpha3 
 Multilingual    Internationalization (i18n)                             7.x-1.x-dev    
 Multilingual    Multilingual select (i18n_select)                       7.x-1.x-dev    
 Other           AddToAny (addtoany)                                     7.x-3.0        
 Other           Backup and Migrate (backup_migrate)                     7.x-2.1        
 Other           CSS Injector (css_injector)                             7.x-1.4        
 Other           Disqus (disqus)                                         7.x-1.1        
 Other           Global Redirect (globalredirect)                        7.x-1.3        
 Other           Inline Messages (inline_messages)                       7.x-1.0        
 Other           Mollom (mollom)                                         7.x-1.0        
 Other           Page Title (page_title)                                 7.x-2.4-beta1  
 Other           Pathauto (pathauto)                                     7.x-1.0-beta1  
 Other           Scheduler (scheduler)                                   7.x-1.x-dev    
 Other           Search 404 (search404)                                  7.x-1.0        
 Other           Token (token)                                           7.x-1.0-beta1  
 Other           Tweetbutton (tweetbutton)                               7.x-1.1        
 Other           Variable API (variable)                                 7.x-1.0-beta2  
 Statistics      Google Analytics (googleanalytics)                      7.x-1.1        
 User interface  CKEditor (ckeditor)                                     7.x-1.x-dev    
 User interface  External Links (extlink)                                7.x-1.12       
 XML sitemap     XML sitemap (xmlsitemap)                                7.x-2.0-beta2  
 XML sitemap     XML sitemap engines (xmlsitemap_engines)                7.x-2.0-beta2  
 XML sitemap     XML sitemap menu (xmlsitemap_menu)                      7.x-2.0-beta2  
 XML sitemap     XML sitemap node (xmlsitemap_node)                      7.x-2.0-beta2 

C'est un bien et un mal, avec la version de dev, on est a peu prêt sûr que les modules vont fonctionner, mais on ne peut pas suivre le processus normal de développement. En gros, on est pas notifié lors de la sortie d'une nouvelle version de dev, ou même lors d'une sortie de version stable.

Ne pas avoir peur de mettre les mains dans le camboui

Quand on recontre une erreur fatale sur une fonction qui n'existe pas, il ne faut pas hésiter à aller voir ce qui se passe directement dans le code, ce sont en général des fonctions d'API supprimées dans D7 qu'il suffit de replacer par leurs homologues et le tour est joué. Ne pas oublier d'aller voir dans les issues du modules pour voir si celle-ci n'a pas été corrigée et dans ce cas là appliquer le patch.

Les plus

Quel plaisir ce Drupal 7 sinon ! L'overlay est un délice et le design de l'administration donne envie d'y rester, j'ai cutomizé Bartik à mon goût et j'en suis content, ça donne vraiment un coup de jeune au site.
Les modules sont mieux triés dans les menus même s'il faut perdre l'habitude de ceux de Drupal 6. Des menus contextuels sont disponibles sur les blocks et les nodes. Les onglets verticaux gagnent autant de place que les fieldset collapsibles de D6 mais affichent en plus un résumé des paramètres dans ceux-ci.

J'en ai également profité pour passer mon blog sur une autre URL et j'ai aussi installé le module Disqus, un gestionnaire de commentaire complet qui prend en charge le login depuis twitter ou facebook, les tweetback, etc.. n'hésitez pas à le tester (pour ma part j'ai enlevé le système de commentaires du Core) : dites-moi ce que vous en pensez en postant un petit commentaire wink

S'abonner à RSS - Drush