2009-10-02 2 views
1

Только что установлен и настроен mod_python 3.2.8 на сервере CentOS 5 (Apache 2.2.3) с Python 2.4.3. Он загружен штрафом Apache.Mod_python не производит выход

Я активировал тестовую страницу 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 

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

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

EDIT: Вот конфигурация Apache для сайта ...

<Directory /> 
    Options FollowSymLinks 
    AllowOverride None 

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

EDIT 2: Ах, еще одна вещь, которую я забыл упомянуть, что я намерен использовать mod_python писать расширения Apache , Само приложение написано на PHP, но мне нужно сделать некоторые твикипы безопасности на сервере :)

+0

Чтобы уточнить, проблема не в сообщении об ошибке, но при этом не производится никакого вывода. – Christoffer

+0

Попробуйте изменить раздел конфигурации Apache , чтобы указать на исходный каталог, gimel

+0

Это, вероятно, поможет взглянуть на журнал ошибок Apache ... – fraca7

ответ

2

Не использовать mod_python.

Распространенной ошибкой является принятие mod_python как «mod_php, но для питона», и это не так . mod_python больше подходит для написания расширений apache, а не для веб-приложений.

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

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

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

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. Pylons. Django. Они делают вещи еще проще.

Хороший сайт, чтобы посмотреть на это wsgi.org

+0

А еще я забыл упомянуть, что я намерен использовать mod_python для написания расширений Apache. Само приложение написано на PHP, но мне нужно сделать som security tweeks на сервере :) Однако я скоро буду экспериментировать с веб-разработкой через Python, и тогда я буду использовать Django. Спасибо за информацию. Это будет полезно для будущих приложений :) – Christoffer

0

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

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

Спасибо :)

+0

Итак, я сделал точно (с твиками, чтобы удовлетворить мой сервер), что nosklo предложил с mod_wsgi 2.6, который я установил в соответствии с руководством на веб-сайте проекта. Но вывод моего testapp - это исходный код Python. Я не нашел никаких советов через Google. Как вы думаете? – Christoffer

+1

@Christoffer: не помещайте файл '.py' в свой веб-корень. Файл '.py' должен находиться в другой папке, за пределами'/var/www'. В примере я выбрал '/ usr/local/www/wsgi-scripts'. Параметр 'apache config' WSGIScriptAlias' сделает мост между запросом пути от сервера и скриптом, который будет запущен, поэтому вместо доступа к 'http: // yourserver/path/thescript.py' вы просто идете' http: // yourselver/pathdefinedinconfig/'. В примере моего ответа это 'http: // server/myapp', даже если ** это не имя скрипта **. – nosklo

+0

Aha :) Он работает сейчас! Спасибо огромное! – Christoffer

1

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

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