En utilisant mon application Django, je peux très bien lire dans la base de données. Lorsque l'application n'avait pas la permission d'accéder au fichier, elle m'a donné cette erreur:
essayer d'écrire une base de données en lecture seule
Ce qui avait du sens. J'ai donc modifié les autorisations sur le fichier, de sorte que le processus Apache dispose d'autorisations en écriture. Cependant, au lieu de pouvoir écrire, j'obtiens cette erreur cryptique:
impossible d'ouvrir le fichier de 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.
Réponses:
Aha, je suis tombé sur un article expliquant cela. Django a aussi des infos sur sa page NewbieMistakes .
La solution consiste à vérifier que le répertoire contenant le fichier de 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ésolu le problème:
la source
chown www-data. .
fait êtrechown www-data .
sinon il y a une sorcière de commande chown que je ne connais pas ... éclairez-moi s'il vous plaît.Ma solution à cela était plus comme ça. 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)
(ou quelle que soit la base de données que vous utilisez)
où pi est l'utilisateur qui a créé tous les fichiers. (oui, c'est un framboise pi)
Au lieu de modifier les autorisations sur www-data, j'ai constaté qu'il me suffisait de modifier les autorisations de la manière suivante:
Cela donne aux groupes un accès en écriture aux fichiers nécessaires et ajoute l'utilisateur www-data au groupe pi.
Remarque: si vous avez une journalisation, vous aurez également besoin de le faire pour le fichier journal Django, sinon Apache ne l’aimera pas beaucoup.
la source
D'après Django, "Impossible d'ouvrir le fichier de base de données" lors de l'utilisation de la section SQLite3 de la page de wiki Django concernant les erreurs des débutants :
db
répertoire existe/tmp
répertoire est accessible en écriture mondialesettings.py
est un chemin completla source
L'ajout d'un utilisateur opérationnel au groupe www-data fonctionne bien dans mon environnement de test. De plus, j'ai mis le fichier sqlite3.db dans un sous - dossier séparé pour plus de sécurité.
Le fichier de base de données sera la propriété de www-data
Mon utilisateur opérationnel obtient un membre du groupe www-data:
Autorisez l'accès en écriture du fichier de base de données aux membres du groupe www-data:
En conséquence, la base de données est accessible en lecture et en écriture par apache2-daemon (utilisateur www-data), sans octroyer d’autorisation au dossier racine du projet et, d’autre part, l’application peut être exécutée en mode dev utilisateur hape, par exemple
aussi.
la source
Emprunté à SO question: https://stackoverflow.com/questions/4283132/apache-instance-user-permission-issue
En supposant que les fichiers appartiennent à l'utilisateur apache pour démarrer:
définir
ACLs
pour utilisateur / groupe pi:Vous pouvez dire qu'il y a un
ACL
avecls -l
, le '+' à la fin des bits d'autorisations:la source
Pour Windows 7, 8.1, 10, Server 2012, etc., suivez les instructions d'installation de Bonobo :
Autoriser l'utilisateur IIS à modifier le dossier C: \ inetpub \ wwwroot \ Bonobo.Git.Server \ App_Data.
Faire cela:
la source
Le serveur de développement doit être exécuté avec le même utilisateur que celui qui a des droits en écriture sur le dossier de la base de données. Par conséquent, si vous avez initialement créé la base de données en tant que root, vous devez être root lorsque vous exécutez:
la source
root
est une très mauvaise idée - Ce serait mieux pourchown
la base de données que pour l'utilisateur ordinaire non privilégié qui exécute normalement le serveur ...créer un sous-répertoire dans le répertoire de travail
créer une base de données sqlite dans le sous-répertoire
changer le propriétaire du sous-répertoire en www-data dans debain ou apache dans centOS
et attrapez une bière bien fraîche.
P / S: vérifier si la procédure a réussi
vous devriez voir tel
la source
il suffit d'écrire
sudo sqlite3 databaseFilename.sql
et c'est du travailla source