Question

Tout d'abord, voici mon 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")

Comme cela a été décrit ici .

Et voici l'erreur que je reçois en essayant de l'exécuter à partir d'un 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 -->

Ma question est la suivante: pourquoi ces paramètres ne sont-ils pas transmis automatiquement par FastCGI? Qu'est-ce que je fais mal? L'exécution du script à partir de mon serveur Web me donne simplement une erreur de serveur interne.

Au lieu des deux dernières lignes de mon script, je peux utiliser

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

Mais j'obtiens toujours exactement la même erreur ...

Était-ce utile?

La solution

Résolu. Ce fichier .htaccess a fait l'affaire, pour une raison quelconque. Je jure que j'ai essayé tout cela avant ...

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]

Autres conseils

Le script s'attend à ce que ces paramètres soient transmis en tant que variables d'environnement. Comme ils ne sont pas présents dans votre environnement shell et que le script ne s'exécute pas dans l'environnement apache fastcgi (qui les fournit), il se plaint.

Avez-vous accès aux journaux d’erreur Apache? Que disent-ils?

Votre hôte est-il compatible avec mod_wsgi? Si tel est le cas, vous pouvez utiliser le gestionnaire 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()

Vous trouverez d'autres instructions sur le wiki modwsgi et sur le < a href = "http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/" rel = "nofollow noreferrer"> Documents Django .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top