Wednesday, 15 February 2012

MySQL error 1064 on Jobeet day 3



Voici le fix pour une erreur mysql sur laquelle je me suis arrachée les cheveux pendant deux jours (donc je la met sur le blog pour rentabiliser :p):
C'est sur le tutoriel Symfony Jobeet (qu'on est sensés terminer en moins de 24h d'après la pub), au jour 3 : en mode console, on nous demande de créer des tables dans une base de données à partir d'un fichier YAML.
Plus précisément, on nous demande de générer du sql et de l’exécuter dans la base en utilisant l'outil ORM propel.
Encore plus précisément, cela consiste à taper deux lignes dans l'invite de commande :

>> symfony propel:build-sql
>> symfony propel:insert-sq

...et de laisser faire le pc faire tout le boulot. En théorie. Sauf qu'en fait ça marche pas dans tous les cas ! Voilà le message d'erreur qui est apparu dans mes cauchemars :



Après des heures de prise de tête et de questionnement philosophique ( --et si je devenais pas facteur au lieu de développeur finalement ?) j'ai fini par déterrer un post unique sur internet résolvant le problème...


...que je relaie ici :)


Voilà la marche à suivre :

1. Ouvrez votre fichier MysqlDDLBuilder.php, localisé vers :
symfony/lib/plugins/sfPropelPlugin/lib/vendor/propel-generator/classes/propel/engine/builder/sql/mysql/MysqlDDLBuilder.php
2. A la ligne 156 changez :
$script .= "Type=$mysqlTableType";
en :
$script .= "Engine=$mysqlTableType";
3. N'oubliez pas de vider le cache symfony :
>> symfony cc
4. Et ça marche !!!


Petites explications :

Comme vous avez pu le constater en empruntant le chemin ci-dessus, le problème vient de propel. Si vous êtes confrontés à cette erreur, c'est parce que vous utilisez la version 1 de propel qui a certaines incompatibilités avec mysql, comme celle à laquelle nous avons fait face.
Contrairement à ce qui est indiqué dans le deuxième post (voir lien), je n'ai pas upgradé propel car l'environnement de travail dans mon entreprise utilise exclusivement propel 1. Si vous ne devez pas faire face à ce genre de considérations il est effectivement préférable d'upgrader propel à sa version 1.5... en théorie. Si vous n'avez pas PEAR et que vous êtes pressés ça risque d'apporter son lot d'arrachage de cheveux supplémentaire.
(symfony installe ses plugins grâce à PEAR, qui n'est pas inclus d'office dans la version 1.2 du framework. Et si vous voulez l'installer, malgré le "Install pear is not complicated" dans le readme, ça se fait en mode console, plus il faut tripoter les variables d'environnement... enfin bref on a plus vite fait d'utiliser la méthode rapide et c'est meilleur pour la santé capillaire)