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.

92voto

Blair Beckwith Points 81

Aha, je viens de tomber sur un article expliquant cela. Django a également des informations sur son site Erreurs des débutants page.

La solution consiste à s'assurer que le répertoire contenant le fichier de la base de données dispose également d'un accès en écriture autorisé pour le processus.

Dans mon cas, l'exécution de cette commande a réglé le problème :

sudo chown www-data .

7voto

Andrew Moore Points 49765

De la Django indique "Impossible d'ouvrir le fichier de base de données" lors de l'utilisation de SQLite3 section de la Erreurs des débutants Le wiki de Django page :

  1. assurez-vous qu'Apache peut aussi écrire dans le répertoire parent de la base de données
  2. s'assurer qu'aucun des dossiers du chemin complet du fichier de la base de données ne commence par un nombre
  3. assurez-vous que le chemin d'accès complet au db le répertoire existe
  4. assurez-vous que votre /tmp le répertoire est inscriptible dans le monde entier
  5. assurez-vous que le chemin vers la base de données spécifié dans settings.py est un chemin complet
  6. Assurez-vous qu'il n'y a pas de caractères spéciaux dans le chemin d'accès.
  7. sous Windows, assurez-vous que le chemin du répertoire db est écrit avec des doubles barres obliques inverses.

7voto

SpiRail Points 171

Ma solution à ce problème était plutôt du genre. Je ne voulais pas vraiment changer la propriété de ce répertoire (principalement parce que j'utilise l'utilisateur pi pour faire des choses comme git).

/var/www/mysite $ ls -la sql*
-rw-rw-r-- 1 pi       pi       25600 Jan  2 22:57 sqlite.db

(ou tout autre base de données que vous utilisez)

où pi est l'utilisateur avec lequel j'ai créé tous les fichiers. (oui c'est un raspberry pi)

Au lieu de changer les permissions pour www-data, j'ai trouvé que je devais seulement changer les permissions comme ceci :

sudo chmod 775 /var/www/mysite
sudo chmod 664 /var/www/mysite/sqlite.db
sudo usermod -a -G pi www-data

Cela donne au groupe un accès en écriture aux fichiers nécessaires et ajoute l'utilisateur www-data au groupe pi.

Remarque : si vous disposez d'un système de journalisation, vous devrez également effectuer cette opération pour le fichier journal de django, sinon Apache ne l'appréciera guère.

5voto

Hartmut Pfarr Points 157

L'ajout d'un utilisateur opérationnel au groupe www-data fonctionne bien sur mon environnement de test. De plus, j'ai placé le fichier sqlite3.db dans un dossier séparé. sous-dossier pour être plus sûr.

Le fichier de la base de données doit appartenir à www-data

sudo chown www-data mysite/db_sqlite3/
sudo chown www-data mysite/db_sqlite3/my.db

Mon utilisateur opérationnel hape devient membre du groupe www-data :

sudo usermod -a -G www-data hape

Autoriser l'accès en écriture aux fichiers de la base de données aux membres du groupe www-data :

sudo chmod u+w+x,g+w+x mysite/db_sqlite3/
sudo chmod u+w+x,g+w+x mysite/db_sqlite3/my.db

En conséquence, la base de données peut être accédée en lecture et écriture par apache2-daemon (utilisateur www-data), sans donner accès au dossier racine du projet, et - d'autre part - l'application peut être exécutée en mode dev par l'utilisateur opérationnel hape, par exemple.

./manage.py runserver

également.

2voto

Mausimo Points 1494

La solution consiste à s'assurer que le répertoire contenant le fichier de la base de données dispose également d'un accès en écriture autorisé pour le processus.

Pour Windows 7, 8.1, 10, Server 2012, etc., suivez les instructions de l'onglet Instructions d'installation de Bonobo :

Autoriser l'utilisateur IIS à modifier C:\inetpub\wwwroot\Bonobo.Git.Server\App_Data dossier.

Pour le faire :

  1. sélectionnez Propriétés du dossier App_Data,
  2. Allez dans l'onglet Sécurité,
  3. cliquez sur modifier,
  4. sélectionnez l'utilisateur IIS (dans mon cas IIS_IUSRS) et ajoutez les droits de modification et d'écriture,
  5. Confirmez ces paramètres en cliquant sur le bouton Appliquer.

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