2010-07-19 13 views
32

después de ejecutar "python manage.py syncdb" i Gett un error que dice "No se puede abrir el archivo de base de datos".Django es "incapaz de abrir el archivo de base de datos"

aquí es la parte importante de mi 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. 

y aquí están los permisos para "apps.db":

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

Mi servidor de Django se llama desde Apache .. . No sé si tiene que ver con los permisos, pero cambiar el propietario de apps.db a "www-data" tampoco funcionó

[editar]

para asegurar www-data pueden acceder a todo esto lo hice lo siguiente:

hizo lo siguiente:

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

pero todavía no funciona :(

+0

Asegúrese de que www-data pueden caminar todo el camino a su base de datos, y no sólo leer/escribe el archivo db. –

Respuesta

16

He resuelto el error cambiando la DATABASE_NAME a una ruta absoluta: /var/www/apps/apps.db.

en una máquina Windows, la barra invertida debe escaparon como: C:\\path\\to\\database\\database_name.db.

+0

¿Qué ocurre si intento acceder a la base de datos a través de la red y la ruta comienza con "\\ MyMachine \ ..." que se traduce en "\\\\ MyMachine \\ ...". Entonces no puedo abrir la conexión, me aparece "no se puede abrir el archivo de la base de datos". Incluso si la base de datos está en mi máquina, solo intento acceder a ella de otra manera. – gajo357

45

Solution from NewbieMistakes

Asegúrese de que Apache también se puede escribir en el directorio principal de la base de datos . SQLite necesita poder escribir en este directorio.

Asegúrese de que cada carpeta de ruta completa del archivo de base no se inicia con número, por ejemplo./www/4myweb/db (observado en Windows 2000).

Si DATABASE_NAME se establece en algo así como '/ Usuarios/sunombre/Sitios/mydjangoproject/db/db', asegúrese de que ha creado el directorio 'db' primero.

Asegúrese de que su directorio/tmp sea de escritura mundial (una causa poco probable como otra cosa en su sistema tampoco funcionará). ls/tmp -ald debería producir drwxrwxrwt ....

Asegúrese de que la ruta a la base de datos especificada en settings.py es una ruta completa .

+14

El permiso del directorio principal no era obvio (para mí); Gracias. –

+1

Hay una entrada de preguntas frecuentes [aquí] (https://code.djangoproject.com/wiki/NewbieMistakes#DjangosaysUnabletoOpenDatabaseFilewhenusingSQLite3) también. – m01

3

DATABASE_NAME está en desuso. Debe usar el formato actualmente admitido. decir

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

} 

y también ver otros ajustes que están en desuso desde el sitio web de Django. :))

1

Bueno, me respondió que sobre esta cuestión. http://goo.gl/KAuXz

que se enfrentaron exactamente el mismo problema. Aquí está mi configuración que funcionó.

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

Otra configuración en caso de sqlite3 será la misma/predeterminada.

2

Para mi sistema Linux, que tenía que darle proceso propietario permiso de escritura en tanto el db.sqlite3 y el directorioque la contenía! ¡Podrías simplemente configurarfacl en su lugar! ejemplo: (https://serverfault.com/questions/484818/best-way-to-set-up-permissions-with-nginx-php-fpm-on-shared-hosting).

(py2.7) [me @ servidor djangoproject-contenedores] $ 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 
Cuestiones relacionadas