Django est " incapable d'ouvrir le fichier de la base de données"

après l'exécution de "python manage.py syncdb" je gett un message d'erreur indiquant "impossible d'ouvrir le fichier de base de données".

voici la partie importante de mon settings.py:

DATABASE_ENGINE = 'sqlite3'    # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'apps.db'      # Or path to database file if using sqlite3.
DATABASE_USER = ''             # Not used with sqlite3.
DATABASE_PASSWORD = ''         # Not used with sqlite3.
DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.

et voici les permissions pour" apps.db":

-rw-r--r-- 1 root root 33792 19. Jul 10:51 apps.db

mon serveur django s'appelle apache... Je ne sais pas si cela a à voir avec les permissions mais changer le propriétaire des applications.db à "www-data" n'a pas fonctionné non plus

[modifier]

pour m'assurer que www-data puisse accéder à tout cela, j'ai fait ce qui suit:

:

chown -R www-data apps
rm apps.db
su www-data
python manage.py syncdb

mais il ne fonctionne toujours pas: (

33
demandé sur Paul D. Waite 2010-07-19 15:05:43

6 réponses

Solution de NewbieMistakes

assurez-vous Qu'Apache peut aussi écrire dans le répertoire parent la base de données. SQLite doit être capable d'écrire dans ce répertoire.

assurez-vous que chaque dossier du chemin complet de votre fichier de base de données ne démarre pas avec le numéro, par exemple. /www/4myweb/db (observé sur Windows 2000).

si DATABASE_NAME est défini à quelque chose comme /Utilisateurs/votrenom/Sites/mydjangoproject/db/db', assurez-vous que vous avez création du répertoire' db ' en premier.

assurez-vous que votre répertoire /tmp peut être écrit dans le monde entier (une cause peu probable comme autre chose sur votre système ne fonctionnera pas). ls /tmp -ald devrait produisez drwxrwxrwt ....

assurez-vous que le chemin vers la base de données spécifiée dans settings.py est une chemin.

49
répondu Shwetabh Sharan 2014-11-27 08:31:06

j'ai résolu l'erreur en changeant le nom de la base de données en un chemin absolu: /var/www/apps/apps.db .

sur une machine windows, backslash doit être échappé comme: C:\path\to\database\database_name.db .

17
répondu niklasfi 2013-01-10 08:08:54

DATABASE_NAME est déprécié. Vous devez utiliser le format actuellement supporté. c'est à dire

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': 'C:/ispdb.sqlite',
    'USER': '',
    'PASSWORD': '',
    'HOST': '',
    'PORT': ''

}

Et Voir aussi d'autres paramètres qui sont dépréciés à partir du site django.:))

3
répondu ejjyrex 2012-04-07 16:59:39

pour mon système linux, j'ai dû donner au propriétaire du processus la permission d'écrire à la fois au db.sqlite3 et le répertoire qu'il contenait! Vous pourriez vous contenter de setfacl! exemple: ( https://serverfault.com/questions/484818/best-way-to-set-up-permissions-with-nginx-php-fpm-on-shared-hosting ).

(py2.7)[moi@serveur django-projet-conteneur]$ ls-la djangoproject/

drwxrwxr-x. 6 root nginx  4096 Jun 14 01:05 .
drwxr-xr-x. 6 root root  4096 Jun 13 23:47 ..
-rwxrwxrwx. 1 root nginx 49152 Jun 14 01:05 db.sqlite3
2
répondu Raptor 2017-04-13 12:13:43

Eh bien, je lui ai répondu sur cette question. http://goo.gl/KAuXz

j'ai affronté exactement le même problème. Voici mon décor qui a fonctionné.

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/neo/django/db/data.sqlite3'

les autres paramètres en cas de sqlite3 seront les mêmes/par défaut.

1
répondu chhantyal 2012-06-28 16:58:58

pour modifier la permission du répertoire parent, vous pouvez utiliser les commandes suivantes:

vérifier le processus apache pour apache v2:

ps -ef | grep apache | grep -v grep

l'utilisateur / groupe est www-data

chgrp www-data /path/to/mydir
chmod g+w /path/to/mydir

Réf: https://askubuntu.com/questions/58725/how-do-we-know-that-a-directory-is-apache-writable

0
répondu user2858738 2018-04-13 14:21:41