Navigation

Toutes les catégories

Voir les derniers articles

Drush : mettre à jour votre site Drupal

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 :

  • la mise à jour du module depuis le site Drupal.org (vous avez remarqué que je n’ai PAS téléchargé manuellement le module !)
  • les mises à jours DB nécessaire (il fait le « update.php ») !
  • le « clear cache« 

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, &#039 ;php&#039 ;, &#039 ; %message in %file on line %line.&#039 ;, &#039 ;a :4 :{s :6 :\&quot ; %error\&quot ; ;s :12 :\&quot ;user warning\&quot ; ;s :8 :\&quot ; %message\&quot ; ;s :105 :\&quot ;MySQL server has gone away\nquery : SELECT name, schema_version FROM system WHERE type = &amp ;#039 ;module&amp ;#039 ;\&quot ; ;s :5 :\&quot ; %file\&quot ; ;s :43 :\&quot ;/home/didier/www/test6/includes/install.inc\&quot ; ;s :5 :\&quot ; %line\&quot ; ;i :81 ;}&#039 ;, 3, &#039 ;&#039 ;, &#039 ;http ://test6.misson.net/index.php&#039 ;, &#039 ;&#039 ;, &#039 ;127.0.0.1&#039 ;, 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 = &#039 ;module&#039 ; 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 &#039 ;&#039 ;,
`value` VARCHAR(255) NOT NULL DEFAULT &#039 ;&#039 ;,
`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 :

Afficher les commentaires (5)

Commentaires

  • D’autres CMS que DRUPAL ?

    Bonjour Webactus,

    J’adore votre site, vraiment… mais il me semble que vous ne parlez QUE de Drupal dans vos articles sur les CMS ? Y’a-t-il une raison à cela ? Un partenariat ? Les autres CMS (et il en existe un certain nombre) n’ont aucun intérêt à vos yeux ? je m’interroge.

    Mis à part cette petite remarque, votre équipe fait un excellent travail, et j’aime revenir sur votre site avec plaisir.

    Cordialement,

    Jérémy.

    • Romain

      Non du tout, on connaît d’autres cms mais didier est un grand fan et utilisateur de drupal. Il nous tient donc au courant au courant des dernières actualité dans ce cms. Sinon pour le blog on utilise wordpress et on connait les autres comme joomla, dotclear, magento, pligg, oscommerce… Il fautjuste avoir du temps pour traiter toutes les news dans ces différentes communauté 🙂

  • Didier Misson

    Bonsoir,

    Je ne parle pas QUE de Drupal 😉

    J’ai d’ailleurs écrit un article sur le plugin « identi.ca » pour WordPress.
    J’ai un blog personnel également en WordPress.

    J’ai personnellement essayé Joomla et Spip, avant de tester Drupal.
    Je n’ai pas trop accroché à Joomla (faut dire qu’à l’époque on parlait bcp de la future divergence entre Joomla et Mamboo, et les choses trainaient… et on n’était même pas sur que la plupart des plugins anciens allaient fonctionner).

    J’ai ensuite fait et géré le site du LUG de Braine-l’Alleud/Waterloo (BE), en Spip (on testait…). Nous sommes restés qques semaines en Spip, avant de tester Drupal.

    Drupal m’a semblé plus simple, plus directement utilisable pour un débutant (à part l’insertion de photos…) que Spip et Joomla.
    Spip peut tout faire, mais faut assez vite se plonger dans le code (c’est un avis personnel !).
    Joomla me semblait moins souple que Drupal, et il a une communauté plus réduite que Drupal.

    Tout ça, c’est un avis personnel, et le résultat de tests avec notre LUG.

    Le fait est que je connais et j’utilise Drupal de plus en plus.
    Une des raisons aussi, c’est qu’il faut bien choisir !
    Pas le temps de devenir un spécialiste (ou au moins d’acquérir une bonne expérience) dans 3 ou 4 CMS !

    Alors, pourquoi j’écris bcp sur Drupal ?
    Mais simplement car je CONNAIS Drupal ! Car je l’utilise !

    Logique que j’écrive un tutoriel sur un CMS que j’utilise, que je connais…
    Ce serait difficile de faire un tuto (en dehors de l’install de base) sur un produit que je ne connais pas :p
    En général, quand je cherche un truc, quand je cale sur un problème, si ça peut intéresser d’autres personnes, j’essaye de faire un billet, un tuto…

    Normal donc que tu lises plus de choses sur Drupal et WordPress, que sur les autres CMS, puisque nous utilisons WordPress pour les blogs, et personnellement Drupal pour les sites (la nuance site / blog est parfois floue)

    Donc, je connais WordPress et Drupal, j’ai essayé et j’ai des notions en Joomla et Spip 1 (pas testé Spip 2)…. mais pas les autres CMS 😮 … ce qui explique que je les aborde peu 😉

    ps : on va varier un peu plus pour les SmartPhone !
    Romain a un iPhone et j’ai depuis peu, un HTC Desire en Android… ça nous permettra de connaitre ces 2 univers 🙂

  • Professionnel drupal

    Il est clair que toutes les informations que vous donnez sont vraiment très bien détaillées. Merci beaucoup de donner de votre temps pour cela.

  • Didier Misson

    Je passe du temps personnellement à essayer ça, d’abord pour mes sites.
    Ce serait dommage que je sois le seul à en profiter 😉
    J’utilise moi-même régulièrement des trucs, astuces, tutos, que j’ai trouvé sur d’autres sites, alors ça me semble logique de partager à mon tour les infos.

    Oui,ça prend du temps en effet, mais finalement si je réussi à gagner du temps, c’est grâce à toutes la communauté (Drupal ici, mais WP, Linux, et les autres) 😉

    Merci et bonne journée.

Newsletter WebActus

Abonnez-vous pour recevoir notre sélection des meilleurs articles directement dans votre boîte mail.

Nous ne partagerons pas votre adresse e-mail.

Articles similaires

Webmarketing

Une proposition de loi contre les propos haineux sur internet bientôt soumise au Parlement

Une proposition de loi pour lutter contre les propos haineux sur internet, rédigée par la députée LRM Laetitia Avia, va être soumise au Parlement...

Publié le par Lucie Dorothe
Webmarketing

Une PS3 Slim 320 Go et une PS3 Slim blanche arrivent au Japon

Le Japon s’apprête à voir débarquer une version blanche de la console de Sony. Celle-ci sera équipé d’un disque dur 160 Go et sera disponible dès le 29 Juillet...

Publié le par Team WebActus