Найти - Пользователи
Полная версия: проблема windows+mod_python
Начало » Web » проблема windows+mod_python
1
gen
установил mod_python, подключил модуль питона в настройке апача, создаю директорию в корне сервера
пишу там скрипт index.py

#!c:/Python25/python.exe -u

print ‘hi world!’

в этой же директории пишу .htaccess:

AddHandler mod_python .py
PythonHandler mptest
PythonDebug On

при попытке обратьться к скрипту пишет в браузере

MOD_PYTHON ERROR

ProcessId: 2208
Interpreter: ‘localhost’

ServerName: ‘localhost’
DocumentRoot: ‘C:/AppServ/www’

URI: ‘/python/index.py’
Location: None
Directory: ‘C:/AppServ/www/python/’
Filename: ‘C:/AppServ/www/python/index.py’
PathInfo: ‘'

Phase: ’PythonHandler'
Handler: ‘mptest’

Traceback (most recent call last):

File “C:\Python25\Lib\site-packages\mod_python\importer.py”, line 1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)

File “C:\Python25\Lib\site-packages\mod_python\importer.py”, line 1202, in _process_target
module = import_module(module_name, path=path)

File “C:\Python25\Lib\site-packages\mod_python\importer.py”, line 304, in import_module
return __import__(module_name, {}, {}, )

ImportError: No module named mptest

я уже и апач другой ставил mod_python другой-один виг выдает,
помогите пожалуйста!
вот моя конфигурация: Apache/2.2.3 (Win32) PHP/5.1.6 mod_python/3.3.1 Python/2.5 Server at localhost Port 80
slivlen
А что это за handler mptest ты прописал и где он лежит? Он должен быть в директории, входящей в список директорий поиска модулей(см. sys.path).
gen
Да небольшая ошибочка вышла,
теперь в sys.path добавил директорию, сервера (в которой лежит скрипт), а в .htaccess прописываю:

AddHandler mod_python .py
PythonHandler index
PythonDebug On

index - это исполняемый скрипт в той самой директории ничего особо не изменилось, вот что выдает:

MOD_PYTHON ERROR

ProcessId: 2428
Interpreter: ‘localhost’

ServerName: ‘localhost’
DocumentRoot: ‘C:/AppServ/www’

URI: ‘/python/index.py’
Location: None
Directory: ‘C:/AppServ/www/python/’
Filename: ‘C:/AppServ/www/python/index.py’
PathInfo: ‘'

Phase: ’PythonHandler'
Handler: ‘index’

Traceback (most recent call last):

File “C:\Python25\Lib\site-packages\mod_python\importer.py”, line 1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)

File “C:\Python25\Lib\site-packages\mod_python\importer.py”, line 1206, in _process_target
object = apache.resolve_object(module, object_str, arg, silent=silent)

File “C:\Python25\Lib\site-packages\mod_python\apache.py”, line 696, in resolve_object
raise AttributeError, s

AttributeError: module ‘C:\AppServ\www\python\index.py’ contains no ‘handler’


MODULE CACHE DETAILS

Accessed: Thu Feb 22 23:01:15 2007
Generation: 0

_mp_fbd641d0b7f6fc363655fd8d53ec922c {
FileName: ‘C:\\AppServ\\www\\python\\index.py’
Instance: 1
Generation: 1
Modified: Wed Feb 07 19:40:06 2007
Imported: Thu Feb 22 23:01:15 2007
}
Mkdir
Имхо, какой-то кривой подход сам по себе.
Это с PHP так можно извращаться. В питоне я бы взял готовый WSGI handler для mod_python и веб-приложение выглядело бы как отдельное приложение.
Статику отдавал бы веб-сервер, а скрипты - наше отдельное веб-приложение.
slivlen
gen
index - это исполняемый скрипт в той самой директории ничего особо не изменилось, вот что выдает:
Изменилось все очень даже значительно(сравни классы исключений). В твоем скрипте должна быть ф-ция handler.
http://www.modpython.org/live/current/doc-html/tut-what-it-do.html

P.S. Вообще внимательней читай документацию, там все неплохо описано.
j2a
Mkdir
Имхо, какой-то кривой подход сам по себе.
Это с PHP так можно извращаться. В питоне я бы взял готовый WSGI handler для mod_python и веб-приложение выглядело бы как отдельное приложение.
Статику отдавал бы веб-сервер, а скрипты - наше отдельное веб-приложение.
+1

За предыдущие пару дней я двум людям (оба кстати были на RuPy и сели после за webdev на питоне) пояснял, что подход “поставлю я апач, а к нему …” порочен. Нужно плясать не от порога, а от печки. Т.е. от приложения. Apache+mod_python - это один из способов развертывания. И уж точно не в devel-окружении.

P.S. если на g-o.r не читается, то есть LJ-sync. Ну еще слайды можно глянуть, с RuPy
gen
спасибо, помогло, как я понимаю, функция handler(req) принимает req - в качестве аргумента при запуске процесса питона когда я пишу uri в браузере. т.е. как я понимаю, нужно запускать какую-то известную питону
функцию и чтобы вывести строку в баузере, мне надо делть что-то типа этого:

from mod_python import apache

def handler(req):

req.content_type = “text/html”
req.write(“<br >Hello World!!!!”)

return apache.OK

а нельзя ли просто писать что то типа
print “hello world!!! ” ?
j2a
Можно, если content-type text/plain
Mkdir
2gen:
Если тебе близок PHP like подход создания сайтов, то попробуй написать веб-приложение под cherrypy.
Для старта лучше возьми версию 2.2 - документация по cherrypy 3 еще не готова, а по 2.2 даже книги есть.
Ничего сложного в cherrypy нет. Свое приложение развернёшь очень быстро. Тебе должно понравится )

Темплейтовый движок можешь взять любой (я, как всегда, порекомендую мой любимый cheetah).
Если привык общаться с базой данных на уровне SQL-запросов, то для MySQL возьми MySQLdb а для PostgreSQL возьми psycopg2.
Если прельщает ORM, то это однозначно SQLAlchemy.

Как правильно сказал Юра:
j2a
подход “поставлю я апач, а к нему …” порочен. Нужно плясать не от порога, а от печки. Т.е. от приложения. Apache+mod_python - это один из способов развертывания.
Поэтому сперва пиши приложение так, чтобы оно запускалось отдельно от любых веб-серверов (в качестве standalone webserver'a), а потом его уже можно будет повесить и на Апач с mod_python и на lighttpd и на nginx и вообще на любой из веб-серверов, которые поддерживают fastcgi.

Это и есть “плясать от печки” к порогу =)
Mkdir
2gen: Да, и еще. Хочу подбодрить твои начинания своим примером.
До того как я перешёл на python, я уже считался матёрым волком в PHP =)
И мне по-началу тоже было очень непривычно со всеми этими WSGI, PythonHandler'ами, fastcgi и прочим.
Плюс ко всему, в то время мои знания английского стремились к нулю до бесконечности =)
А русской документации по WSGI и прочим нет. Это осложняло задачу.

Начал я с Django. Прошёл туториал, мне понравилось и я решил прикрутить моё первое приложение к Апачу.
Именно к Apache, потому что сказывалась старая PHP-привычка и с другими веб-серверами я дела особо не имел.
Как это ни стыдно, но подключить Django к апачу через mod_python у меня так и не получилось =)
Через FastCGI тоже не удалось из-за ограниченности windows (да, тогда я еще пользовался виндою).
В итоге провозился я с этим несколько дней и забил, решив сделать простейший блог без всяких там питоновских фреймворков.

Первое что я сделал - это повторил твои действия ;)
То есть, начал искать способ определения .py файлов в конфиге апача, чтобы работало как в PHP.
Мне удалось это сделать, но я быстро сообразил, что это тупиковый подход.
Тогда я узнал о web.py, попробовал сделать простой блог и все мои представления о подходе к веб-разработке перевернулись с ног на голову (читай: с PHP-подхода на нормальный).

Но, опять же, из-за ограниченности Windows дело далеко не ушло.
И вот только тогда, когда я уже начал дорабатывать реальный веб-проект, написанный на питоне, ситуация с WSGI и прочими начала прояснятся (да и английский стал намного лучше).
Постепенно пришло понимание как работают такие фрейморки как Django, TurboGears и Pylons.
Пришло понимание того, что плясать нужно “от печки” и что вообще можно собрать свой собственный фреймворк из любимых компонентов и обойтись без всяких Django.

Короче, к чему я все веду. Понимание приходит с опытом. Опыт приходит, если не расстраиваться на начальных этапах и продолжать ковыряться.
Новичку гораздо сложнее начать веб-разработку с использованием python, чем начинать с того же PHP.
В PHP все просто: открыл файл, написал <?php и поехали. В питоне сложнее, но оно того стоит!
Поэтому, самое важное правило звучит просто: не отступать.

Собственно, это все что я хотел сказать )
Успехов в постижении Python'а!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB