Pergunta

Em primeiro lugar, aqui está o meu script:

#!/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 foi descrito aqui .

E aqui está o erro que recebo ao tentar executá-lo a partir de 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 -->

A minha pergunta é, por que não esses parâmetros passados ??automaticamente por FastCGI? O que estou fazendo de errado? Executando o script do meu servidor web só me dá um erro interno do servidor.


Em vez das duas últimas linhas do meu script, eu posso usar

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

Mas eu ainda obter exatamente o mesmo erro ...

Foi útil?

Solução

resolveu. Este arquivo .htaccess fez o truque, por qualquer motivo. Eu juro que tentei tudo isso 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]

Outras dicas

O script espera esses parâmetros a serem passados ??como variáveis ??de ambiente. Uma vez que eles não estão presentes em seu ambiente shell, eo script não está em execução no ambiente apache fastcgi (que fornece-los), ele reclama.

Você tem acesso ao apache logs de erros? O que eles dizem?

Será que o seu anfitrião tem apoio mod_wsgi? Se assim for, você poderia usar manipulador wsgi do 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()

Outras instruções podem ser encontradas no modwsgi wiki , eo < a href = "http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/" rel = "nofollow noreferrer"> Django docs .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top