# documentação Django 3.1.9.dev

# Como usar Django com uWSGI

uWSGI é um sevidor de container de aplicação feito em C puro, rápido, auto-ajustável e amigável a desenvolvedores e administradores de sistema.

Ver também

A documentação do uWSGI oferecem um tutorial cobrindo Django, nginx e uWSGI (uma possível implantaçao dentre muitas). A documentação abaixo foca em como integrar o Django com uWSGI.

## Prerequisito: uWSGI

A wiki uWSGI descreve vários instalation procedures. Usando o pip, o gerenciador de pacotes do Python, é possível instalar o uWSGI com um único comando. Por exemplo:

    # Install current stable version.
    $ python -m pip install uwsgi

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

### Modelo uWSGI

uWSGI operates on a client-server model. Your Web server (e.g., nginx, Apache) communicates with a `django-uwsgi` “worker” process to serve dynamic content.

### Configurando e iniciando o servidor uWSGI para o Django

uWSGI fornece múltiplas maneiras de configurar o processo. Veja uWSGI’s configuration documentation e `examples`_.

Aqui um exemplo de um comando para iniciar um servior 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 virtual environment
        --daemonize=/var/log/uwsgi/yourproject.log      # background the process

Asume-se que tem um pacote do projeto no nível mais alto chamado `mysite`, e dentro deste um módulo `mysite/wsgi.py` que contém um objeto `applicação` WSGI. Este é o layout que terá se executar `django-admin startproject mysite` (usando so seu próprio nome de projeto do lugar do `mysite`) com a recente versão do Django. Se este arquivo não existe, é necessário criá-lo. Veja a documentação em Como implementar com WSGI para o conteúdo padrão que deve ser colocado neste arquivo e que você pode adicionar.

As opções específicas para o Django são:

- `chdir`: O caminho do diretório necessário estar no Python path – isto é, o diretório que contém o pacote `mysite`.
- `module`: O módulo WSGI a ser usado – provavelmente o módulo `mysite.wsgi` que o `startproject` cria.
- `env`: Should probably contain at least `DJANGO_SETTINGS_MODULE`.
- `home`: Optional path to your project virtual environment.

Exemplo do arquivo ini de configuração:

    [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

Exemplo de uso do arquivo ini de configuração:

    uwsgi --ini uwsgi.ini

Arrumando o `UnicodeEncodeError` para uploads de arquivos

Se receber um `UnicodeEncodeError``quando fizer upload de arquivos com nomes que contenham caraceteres não ASCII, tenha certeza de configurar o uWSGI para aceitar nome de arquivos não ASCII adicionando isso ao seu ``uwsgi.ini`:

    env = LANG=en_US.UTF-8

Veja a seção Files do guia de referência de unicode para detalhes.

Veja a documentação do uWSGI no managing the uWSGI process para informações sobre iniciar, parar e recarregar os uWSGI workers.