Upgrade Drupal 6 > 7

Je me suis donc motivé pour faire migrer ce blog vers Drupal 7. Autant commencer avec un site web facile et sans enjeu pour tester une upgrade majeur et ses éventuelles mésaventures.

Cela commençait bien, j'avais pris soin de me documenter sur la question de manière officielle, de lire les premiers posts traitant de l'upgrade ici et , et je me disais qu'en suivant les informations précises et détaillées du fichier UPGRADE.txt présent à la racine de la "release" téléchargée (fichier disponible en ligne ici), cela devait forcément fonctionner. Non ? Je dirais, oui, mais non, enfin presque !

 

Bref, je me lance dans le processus, dans cet ordre :

  • backup des fichiers
  • backup de la BDD
  • liste de tous les modules "hors core" installés, puis vérification qu'il existe bien une version compatible V7 pour chacun d'eux. A noter qu'à l'heure où j'écris ces lignes pluseurs modules sont encore en version "dev", notamment IMCE Wysiwyg bridge, Cumulus et Tagadelic. D'ailleurs le fichier UPGRADE.txt est très clair à ce sujet : "You may decide at this point that you cannot upgrade your site, because needed modules or themes are not ready for Drupal 7."

 

J’ai ensuite suivi les instructions du fameux fichier UPGRADE.txt. Tout s'est bien passé jusqu’à l'étape 13, c'est-à-dire au moment de lancer le script du fichier "update.php". Et là, c'est le drame, je tombe sur cette erreur bloquante :

PDOException : SQLSTATE[42S22] : Column not found : 1054 Unknown column 'ssid' in 'where clause' : SELECT 1 AS expression FROM {sessions} sessions WHERE ( (sid = :db_condition_placeholder_0) AND (ssid = :db_condition_placeholder_1) ) FOR UPDATE ; Array ([:db_condition_placeholder_0] => c09fbedd919b94e616f3b4739d06ece6 [:db_condition_placeholder_1] => ) in _drupal_session_write()

Bon, apparemment ce bug est connu, mais les différentes solutions proposées ne résolvent pas mon problème, comme par exemple celle ci-dessous :
«[…] happens if you try to run update.php via HTTPS while being logged in to the site. The two work-arounds are either to logout and set $update_free_access = TRUE ; or run update.php via HTTP.»
Source : http://drupal.org/node/1008352#comment-4634748

Après avoir encore un peu zyeuté sur divers forums je suis tombé sur une procédure efficace qui m’a permis de le contourner, et qui est décrite ici : http://drupal.org/node/1008352#comment-4662854
Un grand merci à a.luiz.n pour ce post !

 

Une fois ce premier obstacle surmonté, une autre erreur est survenue lors de l'activation d'un module développé, dû à la syntaxe d’une fonction SQL qui évolue dans la version 7, décrite ici :

  • D6 : $val = db_result(db_query({...}))
  • D7 : $val = db_query({...})->fetchField();

Source : http://api.drupal.org/api/drupal/includes--database.pgsql.inc/function/db_result/6#comment-1013

 

Enfin, je me suis ensuite attaqué aux soucis de theming, en utilisant ici le thème de base basic (et un document très utile), notamment :

 

A l’heure qu’il est, quelques bugs subsistent, notamment l'affichage du diaporama lié à un module développé sur Drupal , avec plusieurs soucis de syntaxe SQL encore une fois. Donc les précédents posts risquent d'être légérement tronqués à l'heure qu'il est...En cours de correction !

Ah, autre chose, j'ai perdu des choses en route, d'une part certains champs liés au type de contenu, par exemple les champs liés aux vocabulaires de taxonomy, et également la partie dédiée aux commentaires du front...pourtant mon type de contenu est bien paramétré, et mon thème est censé afficher tout ça comme il faut. Probablement des soucis de theming là encore. Ou bien ? Any idea ??