web-dev-qa-db-de.com

Django kann "Datenbankdatei nicht öffnen"

nach dem Ausführen von "python manage.py syncdb" erhalte ich die Fehlermeldung "Datenbankdatei kann nicht geöffnet werden".

hier ist der wichtige teil aus meinen einstellungen.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.

und hier sind die Berechtigungen für "apps.db":

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

Mein Django-Server wird von Apache aus aufgerufen ... Ich weiß nicht, ob es mit den Berechtigungen zu tun hat, aber der Besitzer von apps.db in "www-data" zu ändern, hat auch nicht funktioniert

[bearbeiten]

um sicherzustellen, dass www-daten auf all das zugreifen können, habe ich Folgendes getan: 

hat folgendes getan:

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

aber es funktioniert immer noch nicht :(

33
niklasfi

Ich habe den Fehler behoben, indem ich DATABASE_NAME in einen absoluten Pfad geändert habe: /var/www/apps/apps.db.

Auf einem Windows-Rechner sollte der Backslash wie folgt gekennzeichnet werden: C:\\path\\to\\database\\database_name.db.

17
niklasfi

Lösung von NewbieMistakes

Stellen Sie sicher, dass Apache auch in das übergeordnete Verzeichnis von .__ schreiben kann. Datenbank. SQLite muss in dieses Verzeichnis schreiben können.

Stellen Sie sicher, dass nicht jeder Ordner des vollständigen Pfads Ihrer Datenbankdatei gestartet wird mit Nummer, z./www/4myweb/db (beobachtet unter Windows 2000).

Wenn DATABASE_NAME auf etwas wie .__ eingestellt ist. '/ Benutzer/Ihr Name/Sites/Mydjangoproject/db/db', stellen Sie sicher, dass Sie erstellt zuerst das Verzeichnis 'db'.

Stellen Sie sicher, dass Ihr Verzeichnis/tmp weltweit beschreibbar ist (eine unwahrscheinliche Ursache, da Andere Dinge auf Ihrem System nicht funktionieren werden). ls/tmp -ald sollte produzieren drwxrwxrwt ....

Stellen Sie sicher, dass der Pfad zu der in settings.py angegebenen Datenbank voll ist Pfad.

49
Shwetabh Sharan

DATABASE_NAME ist veraltet. Sie müssen das aktuell unterstützte Format verwenden.

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

}

Und sehen Sie auch andere Einstellungen, die von der Django-Website veraltet sind. :))

3
ejjyrex

Für mein Linux-System musste ich dem Prozessbesitzer Schreibberechtigung sowohl für db.sqlite3 als auch für das -Verzeichnis geben, in dem es enthalten war! Sie könnten stattdessen nur setfacl! Beispiel: ( https://serverfault.com/questions/484818/best-way-to-set-up-permissions-with-nginx-php-fpm-on-shared-hosting ).

(py2.7) [me @ server Django-Projektcontainer] $ 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

Nun, ich habe es auf diese Frage beantwortet. http://goo.gl/KAuXz

Ich stand vor genau demselben Problem. Hier ist meine Einstellung, die funktioniert hat.

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

Andere Einstellungen für sqlite3 sind die gleichen/Standardeinstellungen.

1
chhantyal

Um die Berechtigung des übergeordneten Verzeichnisses zu ändern, können Sie die folgenden Befehle verwenden:

Überprüfen Sie den Apache-Prozess für Apache v2:

ps -ef | grep Apache | grep -v grep

der Benutzer/die Gruppe besteht aus WWW-Daten

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

Ref: https://askubuntu.com/questions/58725/how-do-we-know-that-a-directory-is-Apache-writable

0
user2858738