2009-04-29 15 views
8

En primer lugar, aquí está mi guión:errores WSGIServer al intentar ejecutar Django aplicación

#!/usr/bin/python 
import sys, os 

sys.path.append('/home/username/python') 
sys.path.append("/home/username/python/flup") 
sys.path.append("/home/username/python/django") 
# more path stuff 

os.environ['DJANGO_SETTINGS_MODULE'] = "project.settings" 

from django.core.servers.fastcgi import runfastcgi 
runfastcgi(method="threaded", daemonize="false") 

Como se ha descrito here.

Y aquí está el error que consigo al intentar ejecutarlo desde la shell:

WSGIServer: missing FastCGI param REQUEST_METHOD required by WSGI! 
WSGIServer: missing FastCGI param SERVER_NAME required by WSGI! 
WSGIServer: missing FastCGI param SERVER_PORT required by WSGI! 
WSGIServer: missing FastCGI param SERVER_PROTOCOL required by WSGI! 
Status: 404 NOT FOUND 
Content-Type: text/html 


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html lang="en"> 
<!-- more html which looks to be the correct output --> 

Mi pregunta es, ¿por qué no son los parametros pasados ​​automáticamente por FastCGI? ¿Qué estoy haciendo mal? Ejecutar el script desde mi servidor web solo me da un error interno del servidor.


En lugar de las dos últimas líneas de mi guión, puedo usar

from flup.server.fcgi import WSGIServer 
from django.core.handlers.wsgi import WSGIHandler 
WSGIServer(WSGIHandler()).run() 

Pero todavía obtener el mismo error exacto ...

+0

¿Por qué no estás usando mod_wsgi? –

+2

@ S.Lott: Un par de años tarde, pero estaba en un host compartido. No tuve acceso a WSGI. – mpen

Respuesta

6

Lo resolvió. Este archivo .htaccess hizo el truco, por la razón que sea. Juro que intenté todo esto antes ...

AddHandler fcgid-script .fcgi 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteRule ^(media/.*)$ - [L] 
RewriteRule ^(adminmedia/.*)$ - [L] 
RewriteCond %{REQUEST_URI} !(cgi-bin/myproject.fcgi) 
RewriteRule ^(.*)$ cgi-bin/myproject.fcgi/$1 [L] 
2

El script espera que se pasan los parametros como variables de entorno. Como no están presentes en el entorno de shell y la secuencia de comandos no se ejecuta en el entorno apache fastcgi (que los proporciona), se queja.

¿Tiene acceso a los registros de error de apache? ¿Qué dicen ellos?

¿Su host tiene soporte para mod_wsgi? Si es así, usted podría utilizar manejador wsgi de Django:

import sys 
import os 

base = os.path.dirname(os.path.abspath(__file__)) + '/..' 
sys.path.append(base) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'yourproject.settings' 

import django.core.handlers.wsgi 

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

Otras instrucciones se pueden encontrar en la modwsgi wiki, y el Django docs.

+0

Esto no me da ningún resultado cuando se ejecuta desde el shell, y el error habitual del servidor interno cuando se ejecuta desde mi navegador. No estoy seguro de si mi servidor admite WSGI, ni sé cómo verificarlo. – mpen

+0

Además, no estoy seguro de lo que quiere decir exactamente, pero "no se ejecuta en un entorno fastcgi". Mi host afirma que es compatible con FastCGI, y puedo guardar cosas como .fcgi y ejecutarlas ... ¿Qué ocurre exactamente si no es FastCGI, y cómo lo hago así puedo pedirle a mis proveedores de hosting que lo habiliten? – mpen

+0

Lo que quiero decir es que Apache pasa información a su proceso fastcgi a través de variables de entorno. Su shell no contiene esa información a menos que específicamente lo agregue. Como no estableció esas variables en su entorno de shell cuando ejecutó su script desde la línea de comandos, su script fasgcgi no tiene la información que requiere, de ahí el error. El error que describes en la línea de comandos no está necesariamente relacionado con el error que impide que tu script se ejecute en apache. – vezult

Cuestiones relacionadas