2011-01-31 10 views
5

Questo potrebbe essere il problema più strano nei miei 4 anni con Django.DatabaseError: impossibile aprire il file db, ma solo per l'amministratore Django

Il mio sito funziona correttamente a livello locale. Nell'ambiente di produzione funziona anche bene, tranne quando cerco di accedere al sito di amministrazione, ricevo un errore del server che è un "Errore operativo: impossibile aprire il file di database" nel log degli errori di Apache.

Il file DB è scrivibile in tutto il mondo e il percorso nelle impostazioni è assoluto. L'ambiente di produzione è Ubuntu Lucid/Python 2.6/Sqlite3. Ho provato entrambi con Django 1.2.4 e 1.3 beta.

La parte strana è, posso syncdb sul server. Crea le tabelle e l'utente amministratore. Posso accedere al sito senza problemi. Posso eseguire shell e creare contenuto all'interno del prompt di python. Il sito è sfogliabile. È solo quando accedo all'amministratore, ottengo questo errore.

Non ho basi per nessun ragionamento. Qualsiasi aiuto è molto apprezzato.

ps: L'errore viene generato a livello Apache, non da Django. Il traceback di Django si trova nel log degli errori di Apache, che legge DatabaseError: unable to open database file.

+0

Sei sicuro tutti i vostri modelli sono la stessa versione, come nel database? Ho avuto un problema simile una volta e non l'ho realizzato all'inizio perché ho usato questo modello molto raramente nella mia pagina normale. Ma l'amministratore li aprirà tutti in una volta. –

+0

Non sono riuscito a trovare alcun problema con i modelli. posso comunque accedere al sito admin localmente. inoltre, se fossero modelli, otterrei un errore diverso, non 'impossibile aprire il file di database '. quindi deve essere qualcos'altro che penso. Grazie. – omat

risposta

2

Una stupida ipotesi.

Quale utente esegue apache?

So che è strano che il resto del sito funzioni, ma ricontrolliamo che sqlite db è raggiungibile e leggibile dall'autore Apache è in esecuzione come!

+1

sì, grazie! Ho cambiato il gruppo proprietario per l'intero albero di directory in 'www-data', che è apache, e ha funzionato. strano che avessi già dato il permesso 777 al file del database sqlite ma non ha funzionato. Grazie. – omat

+0

Felice di ascoltare buone notizie. Forse il file era 777, ma una directory (o più) nel percorso non consentiva all'utente apache di raggiungere il file! –

+4

So che è una vecchia domanda ma per completezza: il modulo python sqlite richiede l'accesso in scrittura alla directory contenente il file di database. – Ochoto

1
sudo chown www-data /var/www/yourproject/db.sqlite3 

questo farà il trucco (impostare l'utente ad Apache)

Problemi correlati