Found misprint?

Select it with the mouse and hit Enter

Ctrl-Enter
Processed:
86 1 199 25
на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!

ЯМ:41001223475816

Редактор ресурсов Gettext для Android
The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!
We are glad to hear your questions, comments or suggestions!
(Open in new tab)
Users number: 1135
Русская группа
на Google

Документация Django на русском

Документация на русском языке для Django стала реальностью. Благодаря новым возможностям движка Sphinx мы можем оперативно дополнять перевод, по мере обновления оригинальной документации.

Использование 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

Nule
Nule 6 days, 13 hours ago
Answer | Link

А что такое файл конфигурации проекта 'cargo.settings' ?