2011-10-06 20 views
36

Aparece este error al configurar un servidor en Django. Es sqlite3, lo que significa que debe crear el archivo .db, pero parece que no lo está haciendo. He estipulado SQLite como back-end y una ruta de archivo absoluta para dónde colocarlo, pero no tuve suerte.sqlite3.OperationalError: no se puede abrir el archivo de base de datos

¿Esto es un error o estoy haciendo algo incorrecto? (Estaba pensando, es la ruta del archivo que se especifique lo absoluto en Ubuntu?)

Aquí es el comienzo de mi archivo settings.py:

# Django settings for OmniCloud project. 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

ADMINS = (
# ('Your Name', '[email protected]'), 
) 

MANAGERS = ADMINS 

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
    'NAME': '~/Harold-Server/OmniCloud.db',      # Or path to database file if using sqlite3. 
    'USER': '',      # Not used with sqlite3. 
    'PASSWORD': '',     # Not used with sqlite3. 
    'HOST': '',      # Set to empty string for localhost. Not used with sqlite3. 
    'PORT': '',      # Set to empty string for default. Not used with sqlite3. 
} 
} 
+2

Qué lástima que el mensaje de error original no cubra el nombre de archivo que causa el error, eso podría ayudar un poco. – Hartmut

Respuesta

60

Django NewbieMistakes

PROBLEM You're using SQLite3, your DATABASE_NAME is set to the database file's full path, the database file is writeable by Apache, but you still get the above error.

SOLUTION Make sure Apache can also write to the parent directory of the database. SQLite needs to be able to write to this directory.

Make sure each folder of your database file's full path does not start with number, eg. /www/4myweb/db (observed on Windows 2000).

If DATABASE_NAME is set to something like '/Users/yourname/Sites/mydjangoproject/db/db', make sure you've created the 'db' directory first.

Make sure your /tmp directory is world-writable (an unlikely cause as other thing on your system will also not work). ls /tmp -ald should produce drwxrwxrwt ....

Make sure the path to the database specified in settings.py is a full path.

Also make sure the file is present where you expect it to be.

+0

¿Cómo cambiaría los permisos de Apache a través de la línea de comandos en Linux? – Chris

+0

No cambia los permisos de apache, cambia los permisos del archivo y la carpeta para que Apache pueda leer y escribir en los lugares correctos. Aquí hay una guía de chmod http://catcode.com/teachmod/, que es cómo se cambian los permisos en Linux. aunque debería ser solo chmod + rw folder_name – John

+2

Bien, lo intenté pero aún recibo el mismo error :( – Chris

7

No tiene especificó la ruta absoluta: ha utilizado un atajo, ~, que podría no funcionar en este contexto. Use /home/yourusername/Harold-Server/OmniCloud.db en su lugar.

+0

Intenté esto pero todavía recibí el mismo error. – Chris

+0

¿nombre de usuario sería el nombre del servidor o, como estoy conectado como raíz, raíz? – Chris

+0

No inicies sesión como root, nunca. Configure un usuario para el sitio de Django, o use el usuario de Apache (generalmente www-data). –

18

Me enfrenté exactamente al mismo problema. Aquí está mi configuración que funcionó.

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/path/to/your/db/data.sqlite3' 

Otra configuración en caso de sqlite3 será la misma/predeterminada.
Y necesita crear data.sqlite3.

0

utilizar este tipo me funciona. Windows 7 con Python y Django 2,7 1,5

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': 'C:\\tool\\mysite\\data.db', 

esperanza de sus obras ...

4

Es necesario utilizar ruta completa en lugar de ~/.

En su caso, algo así como /home/harold/Harold-Server/OmniCloud.db.

2

En mi caso, el archivo sqlite db db.sqlite3 se almacenó en el DocumentRoot de apache. Así que, incluso después de ajustar los siguientes permisos no funcionó:

sudo chown www-data:www-data /path/to/db-folder 
sudo chown www-data:www-data /path/to/db-folder/sqlite-db.db 

Finalmente, cuando me mudé db.sqlite3 a una carpeta recién creada dbfolder bajo DocumentRoot y se entregó a los permisos anteriores, y funcionó.

+0

Esto funcionó perfectamente para mí desde el usuario raíz, utilizando una aplicación de matraz para conectarme a la base de datos desde el directorio del proyecto. Funcionó con encanto: solo necesito que apache pueda hablar con el db. –

Cuestiones relacionadas