<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1541"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1541/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1541/atom/feed</id>
  <updated>2008-05-20T16:33:35+02:00</updated>
  <entry>
    <title>Migration vers Drupal 6.2</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1541" />
    <id>http://artisan.karma-lab.net/node/1541</id>
    <published>2008-05-19T02:08:58+02:00</published>
    <updated>2008-05-20T16:33:35+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Drupal" />
    <category term="drupalfr.org" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Article" />
    <summary type="html"><![CDATA[<p>
   Drupal 6 est sans aucun doute une version majeure. Plus ergonomique, plus de fonctions, plus de vélocité et près de 4mo de Patch par rapport à la 5.7. Il était donc grand temps que je fasse la migration vers cette nouvelle mouture. Et après une journée complète passée là dessus, une chose est certaine, c'est de loin la migration Drupal la plus pénible que j'ai eu à réaliser depuis que je travaille avec cet outil. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
   Drupal 6 est sans aucun doute une version majeure. Plus ergonomique, plus de fonctions, plus de vélocité et près de 4mo de Patch par rapport à la 5.7. Il était donc grand temps que je fasse la migration vers cette nouvelle mouture. Et après une journée complète passée là dessus, une chose est certaine, c'est de loin la migration Drupal la plus pénible que j'ai eu à réaliser depuis que je travaille avec cet outil. 
</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>La base de données</h2>
	
<p>
   Tout d'abord, si j'ai un conseil à donner, c'est de bien sauvegarder votre base comme il se doit avant de commencer à migrer. En effet, vu le nombre de changements, sur les 7 sites que j'ai converti, 3 sont partis en sucette live... Un problème très sûrement lié à l'histoire des sites en question et certaines incohérence qui sont apparues en base au fil du temps. Toujours est il que j'étais bien content de pouvoir revenir en arrière lorsque j'ai par exemple découvert que la taxonomy de tous les nodes avait volée...
</p>
<p>
  Dans la série trucs étranges lors de la conversion, j'en ai eu deux assez surprenant. Tout d'abord l'impossibilité de créer plus de deux nouveaux nodes. La raison était que l'entrée correspondant dans <kbd>node_revision</kbd> avait un <kbd>vid=0</kbd>. Au deuxième coup donc, la contrainte de non duplication des ID s'est levée, et les nodes sont rejetés. La raison en était que sur 3 sites sur 5 le champs VID n'était pas en mode "auto incrémentation". Pour régler cela (sous postgresql) :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">ALTER</span> <span class="kw1">TABLE</span> node_revisions <span class="kw1">ALTER</span> <span class="kw1">COLUMN</span> vid <span class="kw1">SET</span> <span class="kw1">DEFAULT</span> <span class="kw1">NEXTVAL</span><span class="br0">&#40;</span><span class="st0">'node_revisions_vid_seq'</span>::regclass<span class="br0">&#41;</span>;
  </div>
  
  </div>
</p>

<p>
  La deuxième chose est que mes nodes étaient invisibles pour les anonymes. Et là aussi pas pour tous les sites, ce qui localise le problème à la conversion de la base. La cause en est cette fois que la table <kbd>node_access</kbd> était vide. Pour régler cela et ajouter la régle de base pour rendre les nodes visibles à tous :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw1">INSERT</span> <span class="kw1">INTO</span> node_access <span class="br0">&#40;</span>nid<span class="sy0">,</span>realm<span class="sy0">,</span>grant_view<span class="br0">&#41;</span> <span class="kw1">VALUES</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="st0">'all'</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span>;
  </div>
  
  </div>
</p>

<p>
  Ensuite, de temps en temps, je me suis retrouvé dans l'impossibilité d'accéder à quoi que ce soit. L'astuce que j'ai trouvée est de relancer l'update (update.php) à vide. 
</p>


	<a name='chapter_2'></a>
  <h2>Les thèmes</h2>
	
<p>
  Ce détail mis à part, la conversion se passe globalement sans encombres. C'est après que les soucis commencent <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> Déjà avec les thèmes et phptemplate qui voit ses identifiants un peu changer (par exemple $sidebar_right devient $right). Il faut bien étudier les thèmes fournis en standard pour retrouver un affichage correcte. De manière sous-jacente, c'est tout le moteur de thème qui a été descendu au niveau du core de Drupal. Faites donc aussi attention si vous utilisez des fonctions de thème dans vos modules et allez voir le nouveau <kbd><a class='external' target='_blank' href='http://api.drupal.org/api/function/hook_theme' >hook_theme</a></kbd>. 
</p>
<p>
  Dernier point pour porter vos thèmes, il faut maintenant un fichier <kbd>.info</kbd> par dossier de thème, comme pour les modules. Prenez exemple sur ceux qui sont fournis en standard. 
</p>

	<a name='chapter_3'></a>
  <h2>Les modules</h2>
	
<p>
  Enfin, le gros du temps passé l'a été à convertir les modules. Pas mal de petites choses ont bougées et le résultat est qu'aucun ne passait. Déjà une nouvelle information est apparue dans le fichier <kbd>.info</kbd> : <kbd>core=\"6.x\"</kbd>. Sans cela, le module ne s'active pas. Autre changement, pour les dépendances, le mot clef devient <kbd>dependencies[]=...</kbd>. Et contrairement à ce que laisse supposer son nom, cette propriété ne prend qu'une dépendance à chaque fois. 
</p>
<p>
  L'autre point problématique est la nouvelle gestion des menus. Il y a eu là une pure et simple ré-écriture du moteur. Un changement en profondeur vous obligeant à revoir complètement les <kbd>hook_menu</kbd>. L'idée principale est que la notion de <kbd>$may_cache</kbd> disparaît au profit d'un système de motifs. Plus d'information à ce sujet <external href=\"http://drupal.org/node/103114\">ici</a>. A noter que maintenant <kbd>hook_menu</kbd> n'est plus systématique invoqué, il faut pour cela désactiver/activer le module correspondant. 
</p>
<p>
  Dans la même série, la fonction <kbd>l(...)</kbd> ne prends plus que 3 paramètre au lieu de 6. Le troisième étant le classique tableau d'attribut qui reçoit maintenant les 3 anciens paramètres (ex <kbd>'html'=>true</kbd>).
</p>
<p>
   Dernier point, il était de coutume de mettre dans la partie <kbd>!$may_cache</kbd> du hook_menu, des choses qui n'avaient au fond rien à faire comme des chargements de feuilles de styles ou javascript. Il faut maintenant placer ce type de code dans le <kbd>hook_init</kbd>. 
</p>

	<a name='chapter_4'></a>
  <h2>Conclusion</h2>
	
<p>
   Voilà pour le plus gros. Il ne me reste maintenant plus qu'à tester tout cela et à reconnecter au fur et à mesure les fonctions qui sont passées à l'as sans que je ne m'en aperçoive. 
</p>
    ]]></content>
  </entry>
</feed>
