Django 1.3 et postgresql (problème lié à pysocopg sous ubuntu oneiric)
Par Twidi,
mardi 18 octobre 2011 à 15:22 :: Développement
:: #113
Tags : debian - django - posgresql - ubuntu
Vous utilisez django ? En version <= 1.3.1 ?
Vous utilisez postgresql ? (qui utiliserait encore mysql...)
Vous venez de mettre à jour votre (k)unbutu en oneiric ?
Jusque là, tout va bien.
mais d'un coup soudain votre navigateur vous affichera un méchant message au lieu de votre belle page :
Exception Value: current transaction is aborted, commands ignored until end of transaction block
Ou alors (car ce n'est pas systématique) un jour vous allez lancer un test de votre application django.
Et là c'est le drame :
psycopg2.ProgrammingError: autocommit cannot be used inside a transaction
MAIS !!??
Le coupable est identifié : psycopg2 qui, en version 2.4.2, casse plus ou moins django.
Le bug est référencé sur le tracker django : https://code.djangoproject.com/ticket/16250
Il est "fixé" mais comme indiqué dans le dernier commentaire, le fix n'est pas dans django 1.3.1 et ne sera donc disponible qu'à partir de django 1.4.
Comment faire ?
Simple.
Il faut donc utiliser psycopg 2.4.1 au lieu de psycopg 2.4.2 fourni avec la dernière ubuntu. Malheureusement le paquet n'est pas disponible.
Pas grave, nous allons le faire à la main !
Avant tout cela vous voudrez peut-être supprimer la version 2.4.2 de psycopg de votre système, dans ce cas :
sudo apt-get --purge remove python-psycopg2
Puis on commence par installer dans le système les paquets nécessaires à la compilation (n'ayez pas peur) de psycopg2 :
sudo apt-get build-dep python-psycopg2
Et enfin on va installer la version voulue via pip (mettez sudo si vous n'êtes pas dans un virtualenv) :
pip install psycopg2==2.4.1
Et voilà tout remarche comme avant !