Главная | Архив новостей | Общение | Площадка | Примеры OpenID
Хостинг Django от «Джино»
Оглавление

Использование Django с Apache и mod_wsgi

Источники: http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide, http://ericholscher.com/blog/2008/jul/8/setting-django-and-mod_wsgi/.

Есть несколько причин для перехода с mod_python на mod_wsgi:

  • mod_python больше не поддерживается разработчиком;

  • mod_wsgi требует меньше ресурсов для своей работы и обладает большими возможностями в настройке.

Поддерживаемые версии Apache

Поддерживаются следующие версии Apache — 1.3, 2.0 и 2.2.

При использовании Apache 1.3 можно динамически подгружать его модули. В случае, когда модули статически слинкованы с Apache, некоторые компоненты mod_wsgi будут работать некорректно.

При использовании Apache 2.0 и 2.2 нет разницы, работаете вы с prefork или worker MPM.

Чтобы иметь возможность mod_wsgi в режиме сервиса, надо использовать Apache 2.0 и 2.2, также соответствующие библиотеки Apache должны быть собраны с поддержкой потоков.

На Linux, если Apache устанавливается из репозитория, следует установить для него пакеты разработчика.

Для большинства дистрибутивов Linux, пакет разработчика для Apache 2.x называется apache2-dev, сам Apache находится в пакете apache2. Тем не менее, некоторые дистрибутивы различают пакеты разработчика по типу MPM, для которого они собраны. В таком случае, пакет может называться как apache2-worker-dev или apache2-prefork-dev. При использовании Apache 2.x не стоит устанавливать пакет apache-dev, так как он относится к Apache 1.3.

Поддерживаемые версии Python

Можно использовать Python версий 2.3-2.5. Используемая версия Python должна быть собрана с поддержкой потоков.

На Linux, если Python устанавливается из репозитария, следует установить для него пакеты разработчика.

Желательно, чтобы Python был доступен в виде разделяемой библиотеки. Если это не ваш случай, то mod_wsgi будет требовать больше памяти и могут возникнуть конфликты с mod_python (если оба модуля будут загружены в одно время), что может привести к падению Apache.

Установка модуля

Пример установки модуля на Ubuntu:

# wajig search mod_wsgi
libapache2-mod-wsgi - Python WSGI adapter module for Apache

# wajig install libapache2-mod-wsgi
Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
Предлагаемые пакеты:
  apache2-mpm-worker apache2-mpm-event
НОВЫЕ пакеты, которые будут установлены:
  libapache2-mod-wsgi
Необходимо скачать 113kБ архивов.
Получено:1 http://ru.archive.ubuntu.com intrepid/universe libapache2-mod-wsgi 2.3-1 [113kB]
Получено 113kБ за 1s (111kБ/c)            
...
 * Reloading web server config apache2
#

Интерфейс к модулю

Создайте внутри вашего проекта каталог, а в каталоге файл django.wsgi. Например, в моём случае это будет так:

$ cd ~/development/cargo
$ mkdir apache
$ emacs apache/django.wsgi

Скопируйте нижеприведённый код в файл django.wsgi:

import os, sys
# место, где лежит джанго
sys.path.append('/home/rad/devel/django-trunk/')
# место, где лежит проект
sys.path.append('/home/rad/devel/')
# файл конфигурации проекта
os.environ['DJANGO_SETTINGS_MODULE'] = 'cargo.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Вы создали интерфейс между Django и WSGI. Если после этого, вы начнёте получать сообщения об ошибках, допустим, что недоступен ваш проект или какой-то из его модулей, проверьте sys.path.

Конфигурация сервера

Откройте конфигурационный файл вашего сервер, например, /etc/apache2/sites-available/cargo.caml.ru и внесите в него изменения:

<VirtualHost *>
        DocumentRoot /var/www-cargo/
        ServerAdmin ruslаn.pоpоv@gmаil.cоm
        ServerName cargo

        WSGIScriptAlias / /home/rad/devel/cargo/apache/django.wsgi
        WSGIDaemonProcess cargo processes=2 maximum-requests=5 threads=1
        WSGIProcessGroup cargo

        ErrorLog "|/usr/sbin/rotatelogs /var/log/apache2/cargo.error.%Y-%m-%d.log 86400"
        CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/cargo.access.%Y-%m-%d.log 86400" combined
        ServerSignature On

        Alias /css/     "/home/rad/django/cargo/css/"
        Alias /js/      "/home/rad/django/cargo/js/"
        Alias /pics/    "/home/rad/django/cargo/pics/"
        Alias /djangobook/pics/ "/home/rad/django/cargo/djangobook/pics/"
        Alias /media/   "/home/rad/django/cargo/media/"
        Alias /adminmedia/ "/home/rad/devel/django-trunk/django/contrib/admin/media/"
</VirtualHost>

Особое внимание надо уделить трём строкам, которые начинаются с WSGI.... Строка с WSGIScriptAlias ссылается на файл, который был создан ранее. Другие две строки необходимы в случае, когда вы размещаете на сервере несколько виртуальных сайтов.

Замечание

Следует принять во внимание то, что директива WSGIDaemonProcess и соответствующие элементы не доступны под ОС MS Windows, а также при использовании Apache 1.3. Подробности...

А самое главное, это не забыть проверить, что в Apache подгружается mod_wsgi:

# ls -l /etc/apache2/mods-enabled/ | grep wsgi
lrwxrwxrwx 1 root root 27 2009-02-18 22:41 wsgi.conf -> ../mods-available/wsgi.conf
lrwxrwxrwx 1 root root 27 2009-02-18 22:41 wsgi.load -> ../mods-available/wsgi.load


Увидели ошибку?
Выделите её мышкой и нажмите
Ctrl-Enter
Обработано:
1049 49 130 71

Версия книги
1.0 2.0
Версия 2.0 в процессе перевода!

Мой луч
Многообразие света

Полезное
Актуальные вакансии, Python работа для python-разработчиков.


Скачать в формате
CHM от 2 сентября

Заказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта.
Чем чаще заказываете — тем больше перевожу.

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
R130494980980
Z425285133788
E112528079659
U327380922061

Книга помогла реализовать:
Проект «Мой луч»
АРМ УФМС.


Мой вебсайт стоит666 337,31 руб

© 2008-2009 Ruslan Popov @ gmail.com Powered by Django 1.1 beta 1 SVN-11114
Главная | Архив новостей | Общение | Площадка | Примеры OpenID