Navigation

Toutes les catégories

Filtrer par auteur

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 :

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

Battle Dev : découvrez les entreprises qui recrutent !

La semaine prochaine aura lieu la Battle Dev, l’événement où les développeurs devront résoudre 6 exercices de code en 2 heures. Pour cette...

Publié le par Cyrielle Maurice
Webmarketing

85 Ressources SEO à connaître absolument

Retrouvez une sélection 85 articles et ressources SEO qui vous aideront à apprendre et développer votre savoir faire pour le référencement...

Publié le par Camille