2009-04-29 6 views
8

Po pierwsze, tu jest mój skrypt:błędy WSGIServer podczas próby uruchomienia aplikacji Django

#!/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") 

Jak zostało opisane here.

i tu jest błąd pojawia się podczas próby uruchomienia go z muszli:

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 --> 

Moje pytanie brzmi, dlaczego nie są te params przekazywane automatycznie przez FastCGI? Co ja robię źle? Uruchomienie skryptu z mojego serwera sieciowego powoduje tylko wewnętrzny błąd serwera.


zamiast dwóch ostatnich linii mojego skryptu, można użyć

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

Ale nadal uzyskać dokładnie ten sam błąd ...

+0

Dlaczego nie używasz mod_wsgi? –

+2

@ S.Lott: Kilka lat za późno, ale byłem na wspólnym hostie. Nie miał dostępu do WSGI. – mpen

Odpowiedz

6

Rozwiązał problem. Ten plik .htaccess zrobił jakąś sztuczkę, z jakiegokolwiek powodu. Przysięgam, że próbowałem tego wszystkiego przed ...

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

Skrypt oczekuje params te mają być przekazywane jako zmienne środowiskowe. Ponieważ nie są one obecne w środowisku powłoki, a skrypt nie działa w środowisku apache fastcgi (które je zapewnia), narzeka.

Czy masz dostęp do dzienników błędów apache? Co oni mówią?

Czy Twój komputer ma wsparcie dla mod_wsgi? Jeśli tak, to można użyć obsługi WSGI 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() 

Dalsze instrukcje można znaleźć na modwsgi wiki, a Django docs.

+0

To nie daje mi żadnego wyjścia podczas uruchamiania z powłoki i zwykłego wewnętrznego błędu serwera podczas uruchamiania z przeglądarki. Nie jestem pewien, czy mój serwer obsługuje WSGI, ani nie wiem, jak sprawdzić. – mpen

+0

Ponadto, nie jestem pewien, co masz na myśli, ale "nie działa w środowisku fastcgi". Mój host twierdzi, że obsługuje FastCGI, i mogę zapisać rzeczy jako .fcgi i uruchomić ... co dokładnie się dzieje, jeśli to nie FastCGI, i jak mam to sformułować, aby poprosić moich dostawców hostingu o włączenie tego? – mpen

+0

Mam na myśli to, że Apache przekazuje informacje do twojego procesu fastcgi za pomocą zmiennych środowiskowych. Twoja powłoka nie zawiera tych informacji, chyba że je specjalnie dodasz. Ponieważ nie ustawiłeś tych zmiennych w środowisku powłoki po uruchomieniu skryptu z linii poleceń, twój skrypt fasgcgi nie ma wymaganych informacji, stąd błąd. Błąd, który opisujesz w linii poleceń, nie jest koniecznie powiązany z jakimkolwiek błędem uniemożliwiającym uruchomienie twojego skryptu pod apache. – vezult