75 votes

Pourquoi ai-je l'erreur sqlite, "impossible d'ouvrir le fichier de la base de données" ?

En utilisant mon application Django, je suis capable de lire la base de données sans problème. Lorsque l'application n'a pas la permission d'accéder au fichier, elle me donne cette erreur :

tentative d'écriture d'une base de données en lecture seule

Ce qui était logique. J'ai donc modifié les permissions sur le fichier, pour que le processus Apache ait les droits d'écriture. Cependant, au lieu d'être capable d'écrire, j'obtiens cette erreur cryptique :

Impossible d'ouvrir le fichier de la base de données

Si c'est utile, voici le résultat complet :

Request Method: POST
Request URL:    http://home-sv-1/hellodjango1/polls/1/vote/
Exception Type: OperationalError
Exception Value:    
unable to open database file
Exception Location: /usr/lib/pymodules/python2.5/django/db/backends/sqlite3/base.py in execute, line 193
Python Executable:  /usr/bin/python
Python Version: 2.5.2
Python Path:    ['/var/www', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/pymodules/python2.5', '/usr/lib/pymodules/python2.5/gtk-2.0']
Server time:    Sun, 23 Aug 2009 07:06:08 -0500

Faites-moi savoir si une trace de pile est nécessaire.

1voto

nex3 Points 4309

Emprunté à la question de SO : https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue

En supposant que les fichiers appartiennent à l'utilisateur apache pour démarrer :

% chown -R apache.apache /var/www/mysite

set ACLs pour l'utilisateur/groupe pi :

% setfacl -d -m u:pi:rwx /var/www/mysite
% setfacl -d -m g:pi:rwx /var/www/mysite

% getfacl /var/www/mysite
# file: /var/www/mysite
# owner: apache
# group: apache
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:pi:rwx
default:group::r-x
default:group:pi:rwx
default:mask::rwx
default:other::r-x

Vous pouvez dire qu'il y a un ACL avec ls -l le "+" qui suit sur les bits de permission :

# ls -la /var/www
drwxr-xr-x   3 apache   apache   80 26. Nov 12:43 .
drwxrwxrwt  15 root     root 360 26. Nov 12:40 ..
drwxrwxr-x+  2 apache   apache   40 26. Nov 12:43 mysite

0voto

brotich Points 101

Créer un sous-répertoire dans le répertoire de travail

mkdir db-folder 

créer une base de données sqlite dans le sous-répertoire

sqlite3 db-folder/db.db

changer le propriétaire du sous-répertoire en www-data dans debain ou apache dans centOS

chown -R www-data db-folder

et prenez une bière fraîche parce que vous avez terminé.

P/S : pour vérifier si la procédure a réussi.

ls -l data-folder

vous devriez voir une telle

-rw-r--r-- 2 www-data root 4096 Jun 18 01:38 data-folder

0voto

Kilizo Points 111

Le serveur de développement doit être exécuté par le même utilisateur qui a des droits d'écriture sur le dossier de la base de données, donc si vous avez créé la base de données en tant que root, vous devrez être root lors de l'exécution :

python manage.py runserver

-2voto

Alireza Points 97

Écrivez simplement sudo sqlite3 databaseFilename.sql et c'est le travail

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X