Spec-Zone.ru › Django 1.10

Как использовать Django с uWSGI

uWSGI — это быстрый, самовосстанавливающийся и удобный для разработчиков/системных администраторов сервер приложений, написанный на чистом C.

См. также

Документация uWSGI содержит учебник по Django, nginx и uWSGI (одна из возможных конфигураций развертывания). Нижеследующие документы сфокусированы на интеграции Django с uWSGI.

Предварительное условие: uWSGI

В вики uWSGI описаны несколько процедур установки. Используя менеджер пакетов Python, pip, вы можете установить любую версию uWSGI одной командой. Например:

# Install current stable version.
$ pip install uwsgi

# Or install LTS (long term support).
$ pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz

Предупреждение

В некоторых дистрибутивах, включая Debian и Ubuntu, поставляется устаревшая версия uWSGI, которая не соответствует спецификации WSGI. Версии до 1.2.6 не вызывают close на объекте ответа после обработки запроса. В таких случаях сигнал request_finished не отправляется. Это может привести к неактивным подключениям к серверам базы данных и memcache.

Модель uWSGI

uWSGI работает по модели клиент-сервер. Ваш веб-сервер (например, nginx, Apache) взаимодействует с django-uwsgi процессом «worker», чтобы обслуживать динамическое содержимое. Подробнее см. в документации uWSGI.

Настройка и запуск сервера uWSGI для Django

uWSGI поддерживает несколько способов настройки процесса. См. документацию по конфигурации uWSGI и примеры.

Вот пример команды для запуска сервера uWSGI:

uwsgi --chdir=/path/to/your/project \
    --module=mysite.wsgi:application \
    --env DJANGO_SETTINGS_MODULE=mysite.settings \
    --master --pidfile=/tmp/project-master.pid \
    --socket=127.0.0.1:49152 \      # can also be a file
    --processes=5 \                 # number of worker processes
    --uid=1000 --gid=2000 \         # if root, uwsgi can drop privileges
    --harakiri=20 \                 # respawn processes taking more than 20 seconds
    --max-requests=5000 \           # respawn processes after serving 5000 requests
    --vacuum \                      # clear environment on exit
    --home=/path/to/virtual/env \   # optional path to a virtualenv
    --daemonize=/var/log/uwsgi/yourproject.log      # background the process

Предполагается, что у вас есть пакет проекта верхнего уровня с именем mysite, и внутри него модуль mysite/wsgi.py, содержащий WSGI application объект. Такая структура получится, если вы запустите django-admin startproject mysite (заменив mysite на имя своего проекта) с последней версией Django. Если этот файл отсутствует, его необходимо создать. См. документацию Как развернуть с помощью WSGI для получения информации о содержимом по умолчанию этого файла и о дополнительных возможностях.

Специфические параметры Django:

  • chdir: Путь к каталогу, который должен быть на пути импорта Python — то есть, каталог, содержащий пакет mysite.
  • module: Модуль WSGI для использования — вероятно, модуль mysite.wsgi, который создаёт startproject.
  • env: Скорее всего, должен содержать как минимум DJANGO_SETTINGS_MODULE.
  • home: Необязательный путь к виртуальной среде вашего проекта.

Пример файла конфигурации ini:

[uwsgi]
chdir=/path/to/your/project
module=mysite.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log

Пример использования файла конфигурации ini:

uwsgi --ini uwsgi.ini

Исправление UnicodeEncodeError для загрузки файлов

Если при загрузке файлов с именами, содержащими не-ASCII символы, возникает ошибка UnicodeEncodeError, убедитесь, что uWSGI настроен на прием имён файлов, содержащих не-ASCII символы, добавив это в свой uwsgi.ini:

env = LANG=en_US.UTF-8

Подробности см. в разделе Файлы справочника по Unicode.

См. документацию uWSGI по управлению процессом uWSGI для получения информации о запуске, остановке и перезагрузке рабочих процессов uWSGI.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/uwsgi/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API