2010-07-19 17 views
32

après l'exécution de "python manage.py syncdb" je reçois une erreur disant "impossible d'ouvrir le fichier de base de données".Django est "incapable d'ouvrir le fichier de base de données"

est ici 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é à partir apache .. Je ne sais pas si cela a à voir avec les permissions mais changer le propriétaire de apps.db à "www-data" n'a pas fonctionné non plus

pour assurer www-data peuvent accéder à tout cela, je l'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 il ne fonctionne toujours pas :(

+0

Assurez-vous que les données www-peuvent marcher tout le chemin de votre db, et pas seulement lire/écris le fichier db. –

Répondre

16

Je résolu l'erreur en changeant DATABASE_NAME à un chemin absolu: /var/www/apps/apps.db.

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

+0

Et si j'essaie d'accéder à la base de données via le réseau et que le chemin commence par "\\ MyMachine \ ..." qui se traduit par "\\\\ MyMachine \\ ...". Ensuite, je ne peux pas ouvrir la connexion, je suis "incapable d'ouvrir le fichier de base de données". Même si la base de données est sur ma machine, j'essaie juste d'y accéder d'une manière différente. – gajo357

45

Solution from NewbieMistakes

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

Assurez-vous que chaque chemin du chemin complet du fichier de base de données ne commence pas avec le numéro, par ex./www/4myweb/db (observé sur Windows 2000).

Si DATABASE_NAME est réglé sur quelque chose comme '/ Users/votrenom/Sites/mydjangoproject/db/db', assurez-vous que vous avez créé le répertoire 'db' abord.

Assurez-vous que votre répertoire/tmp est inscriptible dans le monde entier (une cause peu probable car autre chose sur votre système ne fonctionnera pas non plus). ls/tmp -ald doit produire drwxrwxrwt ....

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

+14

L'autorisation du répertoire parent était non-évidente (pour moi); Merci. –

+1

Il existe une entrée FAQ [ici] (https://code.djangoproject.com/wiki/NewbieMistakes#DjangosaysUnabletoOpenDatabaseFilewhenusingSQLite3). – m01

3

DATABASE_NAME est obsolète. Vous devez utiliser le format actuellement supporté. dire

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

} 

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

1

Eh bien, répondis-je sur cette question. http://goo.gl/KAuXz

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

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

L'autre paramètre dans le cas de sqlite3 sera identique/par défaut.

2

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

(py2.7) [moi @ serveur djangoproject-conteneur] $ ls-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 
Questions connexes