Сводка новостей установки с 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 самостоятельно, как вы пытались это сделать.

Другие вопросы по тегам