2010-01-21 15 views
13

Sto lavorando con il mio provider di hosting per installare e far funzionare un'applicazione Django, ma nessuno di noi ha molta esperienza e praticamente è finito in un vicolo cieco.Impossibile risolvere l'eccezione mod_wsgi nella configurazione di Django

Non ho accesso diretto al file di configurazione, ma ecco come il suo contenuto sono stati descritti a me:

<IfModule mod_wsgi.c> 
WSGIScriptAlias /fredapp/ /home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi 
WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/ 
WSGIProcessGroup fred 
WSGIApplicationGroup %{GLOBAL} 
</IfModule> 

Alias /robots.txt /home/fred/public_html/fred-site/robots.txt 
Alias /favicon.ico /home/fred/public_html/fred-site/favicon.ico 

Alias /settings/media/ /home/fred/public_html/fred-site/media/ 

mio "django.wsgi" script è niente di speciale:

import os, sys 
sys.path.append('/home/fred/public_html/cgi-bin/') 
sys.path.append('/home/fred/public_html/cgi-bin/fredapp/') 
os.environ['DJANGO_SETTINGS_MODULE'] = 'fredapp.settings' 

import django.core.handlers.wsgi 

application = django.core.handlers.wsgi.WSGIHandler() 

Quindi la mia comprensione è che tutto questo significa che se una richiesta arriva per domain.com/fredapp/ che dovrebbe essere convertita all'applicazione tramite django.wsgi. Tuttavia, l'unica risposta che ottengo è:

[Fri Jan 22 18:46:08 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain.com/500.shtml 
[Fri Jan 22 18:46:08 2010] [error] [client xx.xxx.xx.xx] mod_wsgi (pid=26760): Exception occurred processing WSGI script '/home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi'. 
[Fri Jan 22 18:46:03 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain.com/404.shtml 
[Fri Jan 22 18:46:03 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain 

Questo è in esecuzione su Apache su Linux. Ho provato a eseguire ogni riga dello script .wsgi nell'interprete Python sul server e nessuno di essi restituisce alcun errore. Ho anche provato il trucco sys.stdout = sys.stderr e non ho ottenuto ulteriori risultati rispetto a quanto sopra. Il file non esiste errori hanno a che fare con il resto del set-up del sito e si verificano su qualsiasi richiesta. Non ho finito di impostare correttamente tutto ciò (pagine di errore e pagine di indice e così via) perché sto solo cercando di far funzionare l'app stessa.

Ho installato questa app in Apache sul mio computer, anche se NON in modalità Demone, ma è la mia prima app Django, e non penso che il mio provider di hosting ne abbia mai configurata una prima, quindi Stai volando un po 'alla cieca. Se qualcuno ha qualche suggerimento, sarei molto grato. Grazie!

+1

Ci dovrebbe essere un traceback o altri messaggi dopo che 'Eccezione si è verificata durante l'elaborazione dello script WSGI' nel file di registro degli errori di Apache. Quali sono? –

risposta

1

È possibile che la directory iniziale non sia quella in cui si trova il progetto?

Oggi stavo anche la creazione di Apache + mod_wsgi + Django app e dopo l'aggiunta di django.wsgi:

os.chdir('/home/user/my_django_project') 

tutto ha iniziato a lavorare come un fascino.

+0

Grazie per il suggerimento - l'ho provato, ma non ha funzionato. Sempre ricevendo la stessa eccezione. – barsoomcore

+2

È una cattiva pratica affidarsi alla directory di lavoro corrente per le applicazioni Web perché non si può garantire ciò che potrebbe essere in diverse soluzioni di hosting. Cambiare la directory di lavoro come hai fatto non funzionerà necessariamente dal punto di vista tecnico, potresti avere altre applicazioni in esecuzione nello stesso processo che fanno la stessa cosa e puoi rovinarle o ti rovineranno. Pertanto, usa sempre nomi di percorso assoluti e assicurati di impostare correttamente il percorso di ricerca dei moduli Python piuttosto che affidarti alle importazioni relative alla directory di lavoro corrente. –

+0

@Graham Dumpleton: Mi rendo conto che si tratta di una cattiva pratica, ma ho un codice che crea alcuni file di registro nella directory corrente. Deve essere refactored, ma per un po 'devo vivere con questo hack. –

0

Abbiamo avuto lo stesso errore quando l'utente che esegue Apache non aveva i diritti di leggere i file.

+1

E cosa? Quello che è successo? Qual era la risoluzione? Se ti piace la domanda, invitala. Questa non è una risposta. –

+0

@ S.Lott: beh, è ​​una sorta di risposta come utenti che vogliono verificare se possono risolvere il problema impostando i diritti di file corretti possono cercare il comando specifico del sistema operativo su google ... So che la risposta può dare un molte più informazioni, ma non direi che non è una risposta ... –

16

Se la configurazione citata è quella che si sta utilizzando, l'errore è piuttosto ovvio in realtà. Hai:

WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/ 
WSGIProcessGroup scratchf 

dovrebbe essere:

WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/ 
WSGIProcessGroup fred 

Cioè, il nome del gruppo di processo deve corrispondere.

Si dovrebbe però aver visto un messaggio di errore:

No WSGI daemon process called 'scratchf' has been configured 

Questo sarebbe probabilmente prima che l'errore ingresso:

Exception occurred processing WSGI script 

Questo è il motivo per cui è importante che si fornisce tutti i messaggi di log di errore e non dare per scontato che non siano rilevanti.

In alternativa, è stata citata la configurazione diversa da quella che si sta utilizzando o non tutta la configurazione.


UPDATE 1

Sembra che si può avere direttiva ErrorDocument abilitato in Apache per reindirizzare gli errori a un URL specifico. Perché comunque hai installato Django nella root del web server e non hai escluso quegli URL di errore da passare a Django, quindi quando viene generato un errore Django ottiene il reindirizzamento per il documento di errore ma non può risolvere l'URL e successivamente genera un 404. Poiché Apache ha visto un 404 per il reindirizzamento della pagina di errore, restituisce quindi una pagina di errore 500 predefinita. Il risultato finale è che il vero errore originale e ogni informazione sono persi.

Quindi, entrare nella configurazione di Apache e commentare le direttive ErrorDocument.


UPDATE 2

modifica alla configurazione:

WSGIScriptAlias /fredapp /home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi 

Non dovrebbe avere slash sul secondo valore in linea. Perso che stavi effettivamente cercando di montare su un URL secondario e non alla radice del server web.

+0

Il mio errore nella trascrizione, mi dispiace. I nomi dei gruppi di processo e di processo corrispondono - Ho aggiornato la citazione di configurazione per riflettere questo. È certamente possibile che questa citazione della configurazione sia incompleta, tuttavia, come ho detto, non ho accesso al file effettivo, quindi non posso verificare queste informazioni. Aggiungerò anche tutti gli output del log degli errori. – barsoomcore

+0

Grazie. Puoi chiarire cosa intendi per "aver montato Django alla radice del web server"? La mia root del server web è domain.com/, mentre l'app Django è montata su domain.com/fredapp/. È molto probabile che io sia frainteso, quindi, se puoi essere più chiaro qui, lo apprezzerei. Verificherò con il mio provider le direttive ErrorDocument. Grazie per l'input. – barsoomcore

+0

Bene, il mio provider insiste che non ci sono direttive ErrorDocument. A questo punto penso che cercherò un nuovo provider per questa app. – barsoomcore

Problemi correlati