Apache + mod_python
Итак, господа программисты, если вам вдруг приспичило разрабатывать динамические странички при помощи Python, вам необязательно ставить какие-либо фреймворки. Конечно, многие советуют пользоваться фреймворками, но, когда вам нужно быстро написать код и не заморачиваться с изучением функций и прочих их особенностей, вы можете подключить к старому доброму Апачу mod_python. Делается это так.
Сначала скачиваем модуль. Скачать можно . О том, как компилировать модуль, можно почитать . Я не буду заострять на этом внимание, тем более что этот процесс достаточно стандартен. Возьмем простой случай на примере Debian/Ubuntu – пакет для Apache 2 можно подтянуть вот так:
$ sudo apt-get install libapache2-mod-python
теперь нам надо сконфигурировать Apache, для того, чтобы он обрабатывал скрипты Python. Заранее скажу, в результате мы получим обработку скриптов по аналогии со скриптами PHP, обрабатывающимися через mod_php – т.е. положили файлик в нужную нам директорию и обратились к нему из браузера. Для этого в /etc/apache2/sites-available найдем файл с конфигурацией для нашего сайта. В простейшем случае – по умолчанию – это файл default. В нем написано что-то типа:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Находим в нем блок <Directory></Directory>, содержащий описание той директории, в которой мы хотим запускать наши скрипты, или создаем такой блок если его нет. В моем случае мне захотелось, чтобы скрипты запускались из корневой директории веб-сервера и во всех вложенных в нее директориях. Я нашел блок
<Directory /var/www/> ... </Directory>
… и добавил в него следующие строки:
AddHandler mod_python .psp PythonHandler mod_python.psp PythonDebug On
AddHandler – директива, при помощи которой мы назначаем нужное нам расширение файла нужному нам обработчику, в данном случае мы назначили типу файла “.psp” (с таким расширением у нас будут сохраняться скрипты python) обработчику mod_python.
PythonHandler – директива, позволяющая запускать скрипты в разных режимах. Например, значение mod_python.psp даст нам обработку скриптов такую, какую мы хотим, а mod_python.cgihandler будет запускать скрипт Python как CGI-приложение. Для второго варианта понадобится настроить Perl.
PythonDebug – если директива прописана с параметром On, то вы, при дописывании к URL скрипта символ “_” (подчёркивание), получите исходный код скрипта и много другой информации, которую можно использовать при дебаггинге скрипта. У меня пока данная директива не отрабатывает, буду искать решение проблемы.
Далее нам, необходимо подключить сам модуль. Делаем так:
$ sudo a2enmod
Запустится программка для включения модулей Apache, вам в консоли будет предложен список доступных, еще не подключенных модулей. В нем должен быть модуль с названием python. Пишем программке “python” и всё, теперь нам остаётся перезапустить Apache и протестировать работу скрипта:
$ sudo apache2ctl restart
или
$ sudo /etc/init.d/apache2 restart
Тестируем скрипт:

Замечу, что стандартный синтаксис в psp-обработчике не прокатит, т.е. строки
#!/usr/bin/env python
быть не должно, в скрипте должны присутствовать соответствующие теги “<% %>” (есть и другие, подробнее ), в скрипте для PSP могут присутствовать HTML-теги в любом месте скрипта и, соответственно, консольные скрипты мы через браузер обработать не сможем. Есть мысль, что скрипты для работы и через Apache и через консоль, надо выполнять как CGI-приложение. Но это я пока не проверял.
Спасибо вам за добавление статьи в:
Комментариев пока нет »
RSS-фид комментариев для этого поста | Трекбек
Оставить комментарий