2009-04-29 3 views
8

Во-первых, вот мой сценарий:ошибки WSGIServer при попытке запустить 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") 

Как было описано here.

И вот Я получаю ошибку при попытке запустить его из оболочки:

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

Мой вопрос, почему не те PARAMS прошли автоматически FastCGI? Что я делаю не так? Запуск сценария с моего веб-сервера просто дает мне внутреннюю ошибку сервера.


Вместо двух последних строках моего сценария, я могу использовать

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

Но я все еще получаю ту же самую ошибку ...

+0

Почему вы не используете mod_wsgi? –

+2

@ S.Lott: Несколько лет спустя, но я был на общем хозяине. Не имел доступа к WSGI. – mpen

ответ

6

Решено. Этот файл .htaccess делал трюк по любой причине. Клянусь, я пробовал все это раньше ...

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

Сценарий ожидает тех PARAMS будет принят как переменные среды. Поскольку они не присутствуют в вашей среде оболочки, а сценарий не работает в среде apache fastcgi (которая их предоставляет), он жалуется.

У вас есть доступ к журналам ошибок apache? Что они говорят?

Поддерживает ли ваш хозяин поддержку mod_wsgi? Если да, то вы можете использовать обработчик WSGI Джанго:

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

Дальнейшие инструкции можно найти на modwsgi wiki и Django docs.

+0

Это не дает мне никакого результата при запуске из оболочки и обычной ошибки внутреннего сервера при запуске из моего браузера. Я не уверен, поддерживает ли мой сервер WSGI, и не знаю, как проверить. – mpen

+0

Кроме того, я не уверен, что вы имеете в виду, но «не работает в среде fastcgi». Мой хост утверждает, что они поддерживают FastCGI, и я могу сохранить материал как .fcgi и запустить его ... что именно происходит, если это не FastCGI, и как это сделать, чтобы я мог попросить моих хостинг-провайдеров включить его? – mpen

+0

Я имею в виду, что Apache передает информацию вашему процессу fastcgi через переменные среды. Ваша оболочка не содержит эту информацию, если вы ее не добавите. Поскольку вы не устанавливали эти переменные в своей среде оболочки, когда вы запускали скрипт из командной строки, ваш скрипт fasgcgi не имеет требуемой информации, следовательно, ошибки. Ошибка, которую вы описываете в командной строке, не обязательно связана с тем, какая ошибка предотвращает запуск вашего сценария под apache. – vezult

Смежные вопросы