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.