2011-01-31 2 views
5

Cela peut être le plus étrange problème de mes 4 années avec Django.DatabaseError: Impossible d'ouvrir le fichier db, mais seulement pour l'administrateur Django

Mon site fonctionne correctement localement. Dans l'environnement de production, il fonctionne également correctement, sauf que lorsque j'essaie d'accéder au site d'administration, j'obtiens une erreur de serveur qui est un "OperationalError: impossible d'ouvrir le fichier de base de données" dans le journal des erreurs Apache.

Le fichier DB est accessible en écriture universelle et le chemin dans les paramètres est absolu. L'environnement de production est Ubuntu Lucid/Python 2.6/Sqlite3. J'ai essayé les deux avec Django 1.2.4 et 1.3 beta.

La partie étrange est, je peux syncdb sur le serveur. Il crée les tables et l'utilisateur admin. Je peux accéder au site sans problème. Je peux courir shell et créer le contenu dans l'invite de python. Le site est navigable. C'est seulement quand j'accède à l'admin, que j'obtiens cette erreur.

Je n'ai aucune base pour tout raisonnement. Toute aide est grandement appréciée.

ps: L'erreur est déclenchée au niveau d'Apache, pas à partir de Django. La traceback Django est dans le journal des erreurs Apache, qui lit DatabaseError: unable to open database file.

+0

Êtes-vous que tous vos modèles sont la même version comme dans la base de données? J'ai eu un problème similaire une fois et je ne l'ai pas réalisé au début parce que j'ai utilisé ce modèle très rarement sur ma page normale. Mais l'administrateur va tous les ouvrir à la fois. –

+0

Je n'ai pas trouvé de problème avec les modèles. Je peux accéder au site d'administration localement de toute façon. aussi, si c'était des modèles, j'obtiendrais une erreur différente, pas 'impossible d'ouvrir le fichier de base de données'. donc ça doit être quelque chose d'autre je pense. Merci. – omat

Répondre

2

Une conjecture stupide.

Quel utilisateur exécute apache?

Je sais qu'il est étrange que le reste du site fonctionne, mais vérifiez que votre sqlite db est accessible et accessible en lecture-écriture à partir de l'utilisateur Apache fonctionne comme!

+1

oui, merci! J'ai changé le groupe de propriétaires pour l'ensemble de l'arborescence de répertoires à 'www-data', qui est apache, et cela a fonctionné. étrange que j'avais déjà donné 777 l'autorisation au fichier de base de données sqlite, mais cela n'a pas fonctionné. Merci. – omat

+0

Heureux d'entendre de bonnes nouvelles. Peut-être que le fichier était 777, mais un (ou plusieurs) répertoire dans le chemin ne permettait pas à l'utilisateur apache d'atteindre le fichier! –

+4

Je sais que c'est une vieille question mais pour l'exhaustivité: le module python sqlite nécessite un accès en écriture au répertoire contenant le fichier de base de données. – Ochoto

1
sudo chown www-data /var/www/yourproject/db.sqlite3 

cela fera l'affaire (définir l'utilisateur à Apache)

Questions connexes