Drush : mettre à jour votre site Drupal
Mettre à jour votre site Drupal, en ligne de commande ? Oui c'est possible, avec Drush !
Mettre à jour votre site Drupal, en ligne de commande ? Oui c'est possible, avec Drush !
Je suis très content d’annoncer un record de fréquentation pour le mois de juin sur WebActus. En effet, ce mois-ci on a enregistré pas loin de 30 863...
C’est déjà la fin de la semaine et comme il est coutume depuis quelques temps, je vous propose une sélection des vidéos que j’ai regardé cette...
Novo Builder est un logiciel vous permettant de créer votre propre distribution. Quel geek n’a jamais rêvé de concevoir une distribution à son...
LinkedIn est le réseau social des professionnels. Si vous souhaitez garder contact (professionnellement) avec un ami, un collègue, un patron ou tout autre...
Oui vous avez bien lu, le site BestofRobots.fr vous propose un jeu concours sur WebActus pour gagner un Nabaztag, vous savez le lapin communiquant le plus geek...
Twitter a annoncer qu’il avait réduit par 2 le nombre max quotidiens de requêtes à son API. Cela devait arrivé un jour et comme Twitter connait...
Les notifications PUSH sont de plus en plus présentes notamment dans le monde de la téléphonie. Ce mode de notification inverse l’ordre habituel du...
Google vient d’annoncer la mise à jour de son application d’actualités Google News. Cette modification ne revient pas sur le fonctionnement propre...
S’il y a bien une chose difficile à appréhender, c’est bien comment Google Search fonctionne ? Avec une partie de son algorithme secrète,...
Mettre à jour votre site Drupal, en ligne de commande ? Oui c'est possible, avec Drush !
Après avoir vu comment installer Drush, passons à un exemple pratique :
La mise à jour de votre site Drupal en ligne de commande grâce à Drush
Drupal is a registered trademark of Dries Buytaert
Drush peut vous faciliter la vie et vous faire gagner beaucoup de temps et automatisant des tâches répétitives.
Les mises à jour sont peu intéressantes et répétitives.
Utilisons Drush pour faire ces mises à jour ;-)
Pour rappel, Drush est un script utilisable en ligne de commande (terminal ou session SSH) et permettant d’exécuter des commandes sur votre site Drupal.
L’avantage de faire ces commandes dans un script, est que vous pouvez facilement enchainer ces commandes, càd automatiser la gestion de votre site ! Plus besoin de passer 20 minutes pour cliquer d’une page à l’autre de l’interface de gestion Drupal.
Je considère que vous avez un serveur de type LAMP, càd Linux Apache, MySQL et PHP, et que Drupal et Drush sont déjà installés.
Par défaut, Drush travaille sur le dossier actuel.
Mon site de test est http ://test6.misson.net. Il est installé dans mon dossier /home/didier/www/test6
Je vais donc dans ce dossier et j’essaye quelques commandes :
« drush status »
$ cd /home/didier/www/test6/ :/home/didier/www/test6$ drush status Drupal version : 6.14 Default theme : garland Administration theme : garland PHP configuration : /etc/php5/cli/php.ini Drush version : 3.1 Drush configuration : Drupal root : /home/didier/www/test6
Ce site n’est pas à jour… exactement ce qu’il faut pour faire notre test de mise à jour avec Drush :-)
« drush statsmodules » ou « drush sm »
« drush sm » donne la liste des modules, s’ils sont activés ou pas, et leur version.
J’essaye depuis la « racine » de mon installation Drupal, mais ça ne fonctionne pas :
:/home/didier/www/test6$ drush sm Could not find a Drupal settings.php file at ./sites/default/settings.php. [error] Command pm-list needs a higher bootstrap level to run -you will need invoke drush from a more functional Drupal environment to run [error] this command. The drush command 'sm' could not be executed.
Dans mon cas, l’explication est simple.
Je n’ai pas de fichier de configuration par défaut ! Mon dossier « ./sites/default » est vide.
Bien que mon installation ne comprenne qu’un seul site, j’ai pris l’habitude de travailler comme en multi-sites.
Mon fichier de configuration pour le site « test6.misson.net » se trouve dans ./sites/test6.misson.net.
J’ai 2 possibilités :
Soit je spécifie l’URL du site :
drush sm --uri=http ://test6.misson.net
Soit je vais dans le dossier du site :
:/home/didier/www/test6$ cd sites/test6.misson.net/ :/home/didier/www/test6/sites/test6.misson.net$ drush sm Package Name Type Status Version Administration Administration menu (admin_menu) Module Enabled 6.x-1.5 CCK Content (content) Module Enabled 6.x-2.6 CCK Content Copy (content_copy) Module Enabled 6.x-2.6 ... Core - optional Color (color) Module Enabled 6.14 Core - optional Comment (comment) Module Enabled 6.14 Core - optional Contact (contact) Module Not installed 6.14 ... Core - optional Upload (upload) Module Enabled 6.14 Core - required Block (block) Module Enabled 6.14 Core - required Filter (filter) Module Enabled 6.14 ... Image Image Gallery (image_gallery) Module Enabled 6.x-1.0-beta3 Image Image Import (image_import) Module Enabled 6.x-1.0-beta3 Image ImageMagick Advanced Options (image_im_advanced) Module Enabled 6.x-1.0-beta3 Other Pathauto (pathauto) Module Enabled 6.x-2.x-dev Other Token (token) Module Enabled 6.x-1.12 Other Token actions (token_actions) Module Not installed 6.x-1.12 Other TokenSTARTER (tokenSTARTER) Module Not installed 6.x-1.12 Other Bluemarine (bluemarine) Theme Disabled 6.14 Other Chameleon (chameleon) Theme Disabled 6.14 Other Garland (garland) Theme Enabled 6.14 Other Marvin (marvin) Theme Disabled 6.14 Other Minnelli (minnelli) Theme Disabled 6.14 Other Pushbutton (pushbutton) Theme Disabled 6.14
Ce site Test6 n’est vraiment pas à jour, comme je l’avais d’ailleurs constaté via l’interface web :
En fait… j’ai quand même UN module à jour :-)
Commençons les mises à jour :
Quand on travaille via l’interface Web habituelle, il est fortement recommandé de mettre votre site en mode maintenance, avant de commencer les mises à jour de modules ou de Drupal.
Étonnamment, il semble que ce ne soit pas nécessaire avec Drush !
Je vais malgré tout passer le site en mode maintenance…
Il n’y a pas de commande directement pour demander à Drush de passer le site en maintenance, mais il est possible de positionner une variable :
drush vset site_offline 1
Enter a number to choose which variable to set.
[0] : Cancel
[1] : site_offline (new variable)
pour éviter la confirmation (ce qui serait gênant dans un script), ajoutez « –always-set » :
$ drush vset --always-set site_offline 1 site_offline was set to 1. [success]
Je vérifie dans l’interface Web du site. Ok, le site est bien en maintenance. ;-)
Pour rappel, il est TOUJOURS conseillé de faire un backup de vos fichiers ET de votre base de données avant de commencer un backup !
Je suppose donc que vous avez fait ce backup ;-)
Les mises à jour appliquent la dernière version du code Drupal ou des modules. Si vous avez vous même modifié ce code, vous devrez évidemment réappliquer vos modifications sur la nouvelle version des modules…
Vous pouvez mettre à jour un ou plusieurs modules précis.
Par exemple, pour ne mettre à jour que le module Token :
$ drush update token Warning : The command name "update" is deprecated. Please use a recommended form instead (pm-update,up). [warning] ...
J’utilise donc la commande « pm-update » :
$ drush pm-update token Refreshing update status information ... Done. Update information last refreshed : Sun, 07/04/2010 - 17 :15 Update status information on all installed and enabled Drupal projects : Name Installed version Proposed version Status Administration menu 6.x-1.5 6.x-1.5 Up to date Drupal 6.14 6.17 SECURITY UPDATE available Content Construction Kit (CCK) 6.x-2.6 6.x-2.7 SECURITY UPDATE available FileField 6.x-3.7 6.x-3.7 Up to date Image 6.x-1.0-beta3 6.x-1.0-beta5 Update available ImageField 6.x-3.2 6.x-3.7 SECURITY UPDATE available Pathauto 6.x-2.x-dev 6.x-2.x-dev Update available Token 6.x-1.12 6.x-1.13 Update available Code updates will be made to the following projects : Token [token-6.x-1.13] Note : Updated projects can potentially break your site. It is NOT recommended to update production sites without prior testing. Note : A backup of your package will be stored to backups directory if it is not managed by a supported version control system. Note : If you have made any modifications to any file that belongs to one of these projects, you will have to migrate those modifications after updating. Do you really want to continue ? (y/n) : y
La mise à jour génère énormément de messages, qui défilent à toute vitesse, et beaucoup de messages d’erreur !
L’update (pm-update) fait :
Les opérations de nettoyage donnent des messages d’erreur s’il n’y a rien à nettoyer.
C’est probablement normal (je n’ai pas eu le temps de tout lire).
Pas d’inquiétude donc ! :-)
Je vérifie dans l’interface Web :
Le module Token est bien à la dernière version disponible ! :-)
Si je lance la commande « drush pm-update » sans paramètre, elle s’appliquera à tous les modules… et au Core Drupal lui-même !
$ drush pm-update Refreshing update status information ... Done. Update information last refreshed : Sun, 07/04/2010 - 17 :36 Update status information on all installed and enabled Drupal projects : Name Installed version Proposed version Status Administration menu 6.x-1.5 6.x-1.5 Up to date Drupal 6.14 6.17 SECURITY UPDATE available Content Construction Kit (CCK) 6.x-2.6 6.x-2.7 SECURITY UPDATE available FileField 6.x-3.7 6.x-3.7 Up to date Image 6.x-1.0-beta3 6.x-1.0-beta5 Update available ImageField 6.x-3.2 6.x-3.7 SECURITY UPDATE available Pathauto 6.x-2.x-dev 6.x-2.x-dev Update available Token 6.x-1.13 6.x-1.13 Up to date NOTE : A code update for the Drupal core is available. Drupal core will be updated after all of the non-core modules are updated. Code updates will be made to the following projects : Content Construction Kit (CCK) [cck-6.x-2.7], Image [image-6.x-1.0-beta5], ImageField [imagefield-6.x-3.7], Pathauto [pathauto-6.x-2.x-dev] Note : Updated projects can potentially break your site. It is NOT recommended to update production sites without prior testing. Note : A backup of your package will be stored to backups directory if it is not managed by a supported version control system. Note : If you have made any modifications to any file that belongs to one of these projects, you will have to migrate those modifications after updating. Do you really want to continue ? (y/n) : Y
Je vérifie dans l’interface Web :
Tous les modules sont à jour, mais le core de Drupal ne l’est pas encore.
Je relance la commande :
$ drush pm-update Refreshing update status information ... Done. Update information last refreshed : Sun, 07/04/2010 - 17 :45 Update status information on all installed and enabled Drupal projects : Name Installed version Proposed version Status Administration menu 6.x-1.5 6.x-1.5 Up to date Drupal 6.14 6.17 SECURITY UPDATE available Content Construction Kit (CCK) 6.x-2.7 6.x-2.7 Up to date FileField 6.x-3.7 6.x-3.7 Up to date Image 6.x-1.0-beta5 6.x-1.0-beta5 Up to date ImageField 6.x-3.7 6.x-3.7 Up to date Pathauto 6.x-2.x-dev 6.x-2.x-dev Up to date Token 6.x-1.13 6.x-1.13 Up to date Code updates will be made to drupal core. WARNING : Updating core will discard any modifications made to Drupal core files, most noteworthy among these are .htaccess and robots.txt. If you have made any modifications to these files, please back them up before updating so that you can re-create your modifications in the updated version of the file. Note : Updating core can potentially break your site. It is NOT recommended to update production sites without prior testing. Do you really want to continue ? (y/n) : y Project drupal was updated successfully. Installed version is now 6.17. Backups were saved into the directory /home/didier/www/test6/backup/modules/20100704184539/drupal. [ok] Warning : MySQL server has gone away query : INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, ' ;php' ;, ' ; %message in %file on line %line.' ;, ' ;a :4 :{s :6 :\" ; %error\" ; ;s :12 :\" ;user warning\" ; ;s :8 :\" ; %message\" ; ;s :105 :\" ;MySQL server has gone away\nquery : SELECT name, schema_version FROM system WHERE type = & ;#039 ;module& ;#039 ;\" ; ;s :5 :\" ; %file\" ; ;s :43 :\" ;/home/didier/www/test6/includes/install.inc\" ; ;s :5 :\" ; %line\" ; ;i :81 ;}' ;, 3, ' ;' ;, ' ;http ://test6.misson.net/index.php' ;, ' ;' ;, ' ;127.0.0.1' ;, 1278262302) in /home/didier/www/test6/includes/database.mysqli.inc on line 128 WD php : MySQL server has gone away [error] query : SELECT name, schema_version FROM system WHERE type = 'module' in /home/didier/www/test6/includes/install.inc on line 81. MySQL server has gone away [error] query : SELECT name, schema_version FROM system WHERE type = ' ;module' ; in /home/didier/www/test6/includes/install.inc on line 81. An error occurred at function : drush_pm_post_pm_updatecode [error] Backups were restored successfully. [ok] An error occurred at function : drush_pm_update
L’update du Core Drupal n’est PAS faite !
La version précédente a été restaurée …
Je vérifie le site. Il semble tourner correctement, mais Drupal n’a effectivement pas été mis à jour.
Il semble que ce soit une question de ressource pour MySQL ! Mais que modifier ?
Je réessaye :
$ drush pm-update Refreshing update status information ... Done. Update information last refreshed : Sun, 07/04/2010 - 19 :23 Update status information on all installed and enabled Drupal projects : Name Installed version Proposed version Status Administration menu 6.x-1.5 6.x-1.5 Up to date Drupal 6.14 6.17 SECURITY UPDATE available Content Construction Kit (CCK) 6.x-2.7 6.x-2.7 Up to date FileField 6.x-3.7 6.x-3.7 Up to date Image 6.x-1.0-beta5 6.x-1.0-beta5 Up to date ImageField 6.x-3.7 6.x-3.7 Up to date Pathauto 6.x-2.x-dev 6.x-2.x-dev Up to date Token 6.x-1.13 6.x-1.13 Up to date Code updates will be made to drupal core. WARNING : Updating core will discard any modifications made to Drupal core files, most noteworthy among these are .htaccess and robots.txt. If you have made any modifications to these files, please back them up before updating so that you can re-create your modifications in the updated version of the file. Note : Updating core can potentially break your site. It is NOT recommended to update production sites without prior testing. Do you really want to continue ? (y/n) : y Project drupal was updated successfully. Installed version is now 6.17. Backups were saved into the directory /home/didier/www/test6/backup/modules/20100704202330/drupal. [ok] You have pending database updates. Please run `drush updatedb` or visit update.php in your browser. [warning] Executing system_update_6054 [success] CREATE TABLE {semaphore} ( [success] `name` VARCHAR(255) NOT NULL DEFAULT ' ;' ;, `value` VARCHAR(255) NOT NULL DEFAULT ' ;' ;, `expire` DOUBLE NOT NULL, PRIMARY KEY (name), INDEX expire (expire) ) /* !40100 DEFAULT CHARACTER SET UTF8 */ Executing system_update_6055 [success] ALTER TABLE {url_alias} DROP INDEX src_language [success] ALTER TABLE {url_alias} DROP KEY dst_language [success] ALTER TABLE {url_alias} ADD INDEX src_language_pid (src, language, pid) [success] ALTER TABLE {url_alias} ADD UNIQUE KEY dst_language_pid (dst, language, pid) [success] Executing imagefield_update_6006 [success] 'all' cache was cleared [success] Finished performing updates. [ok] The following updates are pending : system module 6054 - Add semaphore table. 6055 - Improve indexes on the {url_alias} table. imagefield module 6006 - Add default values to all ImageFields. Do you wish to run all pending updates ? (y/n) : y
Cette fois, toutes les mises à jour sont faites.
Même les « pending data base updates » (probablement suite au problème précédent) sont faites !
Si je relance la commande, tout est à jour.
L’interface Web me le confirme aussi !
Malgré tout, j’ai un risque, en tout cas sur mon serveur avec mes sites (vos sites sont peut-être plus légers, ou votre serveur configuré d’une autre façon…) d’avoir de nouveau cette erreur « WD php : MySQL server has gone away« .
Je réessayerai sur d’autres sites, en modifiant quelques options dans /etc/mysql/my.cnf
Cela pourrait venir du paramètre « max_allowed_packet = 32M« , à augmenter à 64M … mais je suis déjà à 64M !
Certaines personnes indiquent avoir résolu ce genre de problème (pas uniquement avec Drush) en augmentant à « max_allowed_packet = 128M » ou même plus.
Si vous rencontrez ce problème, essayez donc (en sauvant votre fichier /etc/mysql/my.cnf avant) d’augmenter ce paramètre « max_allowed_packet », ou le paramètre « wait_timeout ».
Je referai des essais sur d’autres sites. ;-)
Mais, reste une opération à faire.
Le site est toujours en mode « Hors ligne » !
La commande pour remettre le site « en ligne » :
$ drush vset --always-set site_offline 0
site_offline was set to 0.
Voilà, le site est en ligne… et à jour !
;-)
Sources :
Abonnez-vous pour recevoir notre sélection des meilleurs articles directement dans votre boîte mail.
Nous ne partagerons pas votre adresse e-mail.