2011-10-06 20 views
36

Viene visualizzato questo errore durante la configurazione di un server in Django. È sqlite3 che significa che dovrebbe creare il file .db ma sembra che non lo stia facendo. Ho stipulato SQLite come back-end e un percorso file assoluto per dove metterlo, ma senza fortuna.sqlite3.OperationalError: impossibile aprire il file di database

È un errore o sto facendo qualcosa di sbagliato? (Stavo pensando, è il percorso di file assoluto specificato diversamente in Ubuntu?)

Qui è l'inizio del mio file 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

Che peccato che il messaggio di errore originale non copra il nome del file che causa l'errore, che potrebbe aiutare un po '. – Hartmut

risposta

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

Come cambierei le autorizzazioni di Apache tramite la riga di comando in Linux? – Chris

+0

Non si modificano le autorizzazioni di apache si modificano le autorizzazioni del file e della cartella in modo che Apache possa leggere e scrivere nelle posizioni corrette. Ecco una guida a chmod http://catcode.com/teachmod/ che spiega come modificare i permessi in linux. anche se dovrebbe essere solo chmod + rw nome_cella – John

+2

Okay, l'ho provato, ma ho comunque ottenuto lo stesso errore :( – Chris

7

Non hai specificato il percorso assoluto - hai utilizzato una scorciatoia, ~, che potrebbe non funzionare in questo contesto. Utilizzare invece /home/yourusername/Harold-Server/OmniCloud.db.

+0

Ho provato questo, ma ho ancora lo stesso errore. – Chris

+0

nome utente deve essere il nome del server o, dal momento che sono registrato come root, root? – Chris

+0

Non accedere come root, mai. Configurare un utente per il sito Django o utilizzare l'utente Apache (di solito www-data). –

18

Ho affrontato esattamente lo stesso problema. Ecco il mio ambiente che ha funzionato.

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

Altre impostazioni in caso di sqlite3 saranno uguali/predefinite.
E devi creare data.sqlite3.

0

utilizzare questo tipo funziona per me. windows 7 con Python 2.7 e Django 1,5

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

speranza le sue opere ...

4

è necessario utilizzare il percorso completo al posto di ~/.

Nel tuo caso, qualcosa come /home/harold/Harold-Server/OmniCloud.db.

2

Nel mio caso il file sqlite db.sqlite3 è stato memorizzato nell'DocumentRoot di apache. Così, anche dopo aver impostato le seguenti autorizzazioni non ha funzionato:

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

Infine quando mi sono trasferito db.sqlite3 in una cartella appena creata dbfolder sotto DocumentRoot e ho dato i permessi di cui sopra, e ha funzionato.

+0

Questo ha funzionato perfettamente per me da utente root - utilizzando un'app di flask per connettersi al db all'interno della directory del progetto. Ha funzionato con un certo fascino - solo bisogno di ottenere apache in grado di parlare con il db. –

Problemi correlati