Сводка новостей установки с WSGI и Apache
Я установил Roundup 1.4 в официальном репозитории Debian Squeeze и хочу запустить его на своем сервере Apache, используя mod_wsgi
, Конфигурация хоста:
<VirtualHost *:80>
ServerName support.domain.com
WSGIScriptAlias / /var/roundup/support/apache/roundup.wsgi
WSGIDaemonProcess support.roundup user=roundup group=roundup threads=25
WSGIProcessGroup support.roundup
<Directory /var/roundup/support>
<Files roundup.wsgi>
Order allow,deny
Allow from all
</Files>
</Directory>
# ... some logging configuration
</VirtualHost>
Я был установлен трекер в /var/roundup/support
с помощью roundup-admin install
, настроить его и затем инициализировать, используя roundup-admin initialise
, Тогда я был создан apache/roundup.wsgi
:
from roundup.cgi.wsgi_handler import RequestDispatcher
tracker_home = '/var/roundup/support'
application = RequestDispatcher(tracker_home)
При открытии моего сайта на http://support.domain.com
(Конечно, этот URL немного отличается) У меня есть HTTP-ответ 500 Internal Server Error
и войти с:
mod_wsgi (pid=17433): Exception occured processing WSGI script '/var/roundup/support/apache/roundup.wsgi'.
RuntimeError: response has not been started
В чем дело? Как правильно запустить обзор с помощью wsgi (не cgi)? Или где посмотреть, почему ответ не был начат?
РЕДАКТИРОВАТЬ
Руководство по установке Roundup говорит, что обработчик wsgi будет выглядеть так:
from wsgiref.simple_server import make_server
# obtain the WSGI request dispatcher
from roundup.cgi.wsgi_handler import RequestDispatcher
tracker_home = 'demo'
app = RequestDispatcher(tracker_home)
httpd = make_server('', 8917, app)
httpd.serve_forever()
Но это не дает ответа. Браузер загружает его навсегда без сообщений или журнала сервера. Я думаю, что запуск другого сервера из скрипта, запущенного модулем apache, не очень хорошая идея. Поэтому я попробовал другой пример кода:
from roundup.cgi.wsgi_handler import RequestDispatcher
tracker_home = '/var/roundup/support'
application = RequestDispatcher(tracker_home)
from flup.server.fcgi import WSGIServer
WSGIServer(application).run()
Но это вызывает некоторые ошибки, такие как:
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!
Должен быть способ запустить мое приложение из RequestDispatcher...
2 ответа
Согласно этой проблеме это проблема разрешения. Решено с помощью:
WSGIDaemonProcess support.roundup user=roundup group=roundup threads=25
WSGIProcessGroup support.roundup
где файлы в /var/roundup/support/
имеет roundup
как владелец и группа с соответствующими правами доступа.
Пытаться:
from roundup.cgi.wsgi_handler import RequestDispatcher
tracker_home = '/var/roundup/support'
application = RequestDispatcher(tracker_home)
Все, что нужно mod_wsgi - это объект application, который является допустимой точкой входа приложения WSGI.
Вам не нужно запускать сервер WSGI или адаптер FASTCGI самостоятельно, как вы пытались это сделать.