Accueil > django, mod_wsgi, sqlite > Django, sqlite et mod_wsgi, attention au piège!

Django, sqlite et mod_wsgi, attention au piège!

14/03/2009 admin

Tout d’abord, je tiens à préciser que le problème qui suit n’est pas limité à l’utilisation de django ou de mod_wsgi.

Le contexte

Utilisation de SQLite pour un projet django déployé sur mod_wsgi:

# settings.py
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = '/opt/mysite/mysite.db'

Et voici les permissions sur le système de fichier:

-rw-rw-rw- 1 ohan ohan 29696 2009-03-14 13:30 mysite.db

Tous les répertoires parents sont eux en 755 (lecture et exécution), ce qui ne devrait donc poser aucun problème, même pour l’utilisateur utilisé par les processus apache/mod_wsgi.

Le problème

Lors de la première tentative d’accès à la base de donnée (par exemple en accédant à l’administration django), une erreur 500 INTERNAL SERVER ERROR est renvoyée, et dans le fichier de log d’apache:

OperationalError: unable to open database file

La solution

Lors de l’accès à un fichier de base de données, SQLite va créer un fichier journal qui lui servira (entre autres) à gérer les accès à cette base. Plus d’informations sur la page expliquant les méthodes de vérouillage: locking in sqlite v3.

Pour créer ce fichier, il faut donc que l’utilisateur puisse écrire dans le répertoire parent.

chmod a+rw /opt/mysite

Ce problème ne devrait se présenter que lors d’un déploiement en environnement de production pour un projet qui utilise SQLite, ou sur un environnement de test si, comme moi, vous préférez tester sur apache directement, et non sur le runserver.

Categories: django, mod_wsgi, sqlite Tags:
  1. zaf
    15/03/2009 à 20:40 | #1

    Tu peux aussi configurer mod_wsgi pour qu’il lance ton appli par le biais d’un utilisateur et un groupe donné. Tu peux même préciser le répertoire de l’appli
    Par exemple:

    WSGIDaemonProcess mysite threads=25 home=/home/mysite user=mysite group=mysite

    dans ton apache.conf ou httpd.conf (enfin là où tu as configuré mod_wsgi)

    Ainsi plus de probleme de permissions si ton répertoire parent est en 755 et que l’utilisateur spécifié est propriétaire de ce répertoire.

  2. admin
    30/03/2009 à 18:42 | #2

    Effectivement, c’est une autre solution ;)
    Vraiment désolé pour le très long délai de publication de ton commentaire… disons que… enfin c’est à cause du… bref j’ai pas d’excuse :(

Les commentaires sont fermés.