Mod_python не производит вывод - PullRequest
1 голос
/ 02 октября 2009

Только что установлен и настроен mod_python 3.2.8 на сервере CentOS 5 (Apache 2.2.3) с Python 2.4.3. Он отлично загружается Apache.

Я активировал тестовую страницу mpinfo, и она работает. Поэтому я написал простой «Hello World» со следующим кодом:

from mod_python import apache

def handler(req):
    req.content_type = 'text/plain'
    req.write("Hello World!")
    req.flush()
    return apache.OK

Выводит пустую страницу без текста и источника. Если я сознательно создаю синтаксическую ошибку, я получаю вывод ошибки на URL, например (когда я ставлю пробел перед «def»):

Mod_python error: "PythonHandler mod_python.cgihandler"

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 299, in HandlerDispatch
    result = object(req)

  File "/usr/lib/python2.4/site-packages/mod_python/cgihandler.py", line 96, in handler
    imp.load_module(module_name, fd, path, desc)

  File "/var/www/vhosts/localhost/httpdocs/mptest.py", line 3

    def handler(req):

    ^

SyntaxError: invalid syntax

Я провел около пяти часов, просматривая различные учебные пособия, часто задаваемые вопросы и руководства по устранению неполадок, но не могу найти описание этой проблемы exakt.

Как вы думаете, может быть проблема / причина?

РЕДАКТИРОВАТЬ: Вот конфигурация Apache для сайта ...

<Directory />
    Options FollowSymLinks
    AllowOverride None

    AddHandler mod_python .py
    PythonHandler mptest
    PythonDebug On 
</Directory>

РЕДАКТИРОВАТЬ 2: Ах, еще одна вещь, которую я забыл упомянуть, это то, что я намерен использовать mod_python для написания расширений Apache. Само приложение написано на PHP, но мне нужно сделать несколько настроек безопасности на сервере:)

Ответы [ 3 ]

2 голосов
/ 02 октября 2009

Не используйте mod_python.

Распространенной ошибкой является mod_python в качестве "mod_php, но для python ", и это не соответствует действительности . mod_python больше подходит для написания расширений Apache, а не веб-приложений.

Стандартизированный протокол для использования между веб-приложениями python и веб-серверами (не только apache) - WSGI . С его помощью вы можете опубликовать свое приложение на любом веб-сервере, совместимом с wsgi (почти все современные веб-серверы совместимы с wsgi)

На apache, используйте mod_wsgi вместо.

Ваш пример переписан с использованием стандарта wsgi и mod_wsgi на apache:

mywebapp.py

def application(environ, start_response):
    start_response('200 OK', [('content-type', 'text/plain')])
    return ['Hello World']

Конфигурация Apache:

WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/mywebapp.py
<Directory /usr/local/www/wsgi-scripts>
  Order allow,deny
  Allow from all
</Directory>

Теперь просто перейдите к http://localhost/myapp и скрипт запустится. Кроме того, этот сценарий будет обрабатывать любой доступ в этом корне (т. Е. http://localhost/myapp/stuff/here).

Хорошая идея - выбрать веб-фреймворк. CherryPy . Пилоны . Джанго . Они делают вещи еще проще.

Хороший сайт, на который можно посмотреть: wsgi.org

1 голос
/ 03 октября 2009

Ваша первоначальная проблема в том, что для обработки запроса вызывается mod_python.cgihandler. Это означает, что ваш файл скрипта Python интерпретируется как скрипт CGI. Таким образом, неудивительно, что это ничего не возвращает.

Возможно, в вашей конфигурации Apache имеется конфликтующее определение, которое включает mod_python.cgihandler.

0 голосов
/ 02 октября 2009

Я делаю совершенно новый ответ для ясности ...

Я решил вместо этого установить mod_wsgi. Итак, я настроил его, и когда я захожу в свой тестовый файл, я просто вижу исходный код страницы. Я еще не тратил время на поиск проблемы, поэтому я свяжусь с вами, когда решу проблему или решу, что мне нужна дополнительная помощь:)

Спасибо:)

...