Ноя
11
2009

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

Тестируем скрипт:

Работа скрипта Python через Apache 2 и mod_python

Замечу, что стандартный синтаксис в psp-обработчике не прокатит, т.е. строки

#!/usr/bin/env python

быть не должно, в скрипте должны присутствовать соответствующие теги “<% %>” (есть и другие, подробнее тут), в скрипте для  PSP могут присутствовать HTML-теги в любом месте скрипта и, соответственно, консольные скрипты мы через браузер обработать не сможем. Есть мысль, что скрипты для работы и через Apache и через консоль, надо выполнять как CGI-приложение. Но это я пока не проверял.


Спасибо вам за добавление статьи в:
Автор опуса: Олег | Категория: Linux,Python

Комментариев пока нет »

RSS-фид комментариев для этого поста | Трекбек


Оставить комментарий

* Необходимые для заполнения поля
Before you submit form:
Human test by Not Captcha

 

Шаблон: TheBuckmaker.com | Локализация, модификация: Олежек | Хостинг: Bluehost.com