web-dev-qa-db-fra.com

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

après avoir exécuté "python manage.py syncdb", une erreur s'est produite 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 autorisations pour "apps.db":

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

Mon serveur Django est appelé depuis Apache ... Je ne sais pas s'il s'agit d'autorisations, mais changer le propriétaire de apps.db en "www-data" ne fonctionnait pas non plus.

[modifier]

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

a fait ce qui suit:

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

mais cela ne fonctionne toujours pas :(

33
niklasfi

J'ai résolu l'erreur en remplaçant DATABASE_NAME par un chemin absolu: /var/www/apps/apps.db.

Sur une machine Windows, la barre oblique inversée doit être échappée comme suit: C:\\path\\to\\database\\database_name.db.

17
niklasfi

Solution de NewbieMistakes

Assurez-vous qu'Apache peut également écrire dans le répertoire parent du fichier base de données. SQLite doit pouvoir é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 numéro, par exemple./www/4myweb/db (observé sous Windows 2000).

Si DATABASE_NAME est défini sur quelque chose comme '/ Users/votrenom/Sites/mydjangoproject/db/db', assurez-vous que vous avez bien créé le répertoire 'db' en premier.

Assurez-vous que votre répertoire/tmp est accessible en écriture universelle (une cause improbable, car Toute autre chose sur votre système ne fonctionnera pas non plus). ls/tmp -ald devrait produire drwxrwxrwt ....

Assurez-vous que le chemin d'accès à la base de données spécifiée dans settings.py est un fichier .__ complet. chemin.

49
Shwetabh Sharan

DATABASE_NAME est obsolète. Vous devez utiliser le format actuellement pris en charge . i.e.

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

}

Et consultez également les autres paramètres qui sont déconseillés sur le site Web de Django. :))

3
ejjyrex

Pour mon système Linux, je devais donner l’autorisation en écriture du propriétaire du processus à la fois à db.sqlite3 et au répertoire qui le contenait! Vous pourriez simplement mettre setfacl à la place! exemple: ( https://serverfault.com/questions/484818/best-way-to-set-up-permissions-with-nginx-php-fpm-on-shared-hosting ).

(py2.7) [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
Raptor

Eh bien, j'ai répondu à cette question. http://goo.gl/KAuXz

J'ai fait face exactement au même problème. Voici mon réglage qui a fonctionné.

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

Les autres paramètres dans le cas de sqlite3 seront identiques/par défaut.

1
chhantyal

Pour modifier l'autorisation du répertoire parent, vous pouvez utiliser le jeu de commandes ci-dessous:

vérifiez 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
user2858738