Så här använder du Django med uWSGI¶
uWSGI är en snabb, självläkande och utvecklar-/sysadminvänlig applikationscontainerserver kodad i ren C.
Se även
I uWSGI-dokumenten finns en ”tutorial” som täcker Django, nginx och uWSGI (en möjlig distributionsuppsättning av många). Dokumentationen nedan fokuserar på hur man integrerar Django med uWSGI.
Förkunskapskrav: uWSGI¶
I uWSGI:s wiki beskrivs flera ”installationsförfaranden”. Med hjälp av pip, Pythons pakethanterare, kan du installera alla uWSGI-versioner med ett enda kommando. Till exempel:
# 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
uWSGI-modell¶
uWSGI fungerar enligt en klient-servermodell. Din webbserver (t.ex. nginx, Apache) kommunicerar med en django-uwsgi
”worker”-process för att servera dynamiskt innehåll.
Konfigurera och starta uWSGI-servern för Django¶
uWSGI stöder flera sätt att konfigurera processen. Se uWSGI:s konfigurationsdokumentation.
Här är ett exempel på ett kommando för att starta en uWSGI-server:
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
Detta förutsätter att du har ett projektpaket på högsta nivån som heter mysite
och inom det en modul mysite/wsgi.py
som innehåller ett WSGI application
-objekt. Detta är den layout du kommer att ha om du körde django-admin startproject mysite
(med ditt eget projektnamn i stället för mysite
) med en ny version av Django. Om den här filen inte finns måste du skapa den. Se Så här distribuerar du med WSGI-dokumentationen för standardinnehållet som du bör lägga till i den här filen och vad du kan lägga till i den.
De Django-specifika alternativen här är:
chdir
: Sökvägen till den katalog som måste finnas med på Pythons importväg, dvs. den katalog som innehåller paketetmysite
.modul
: WSGI-modulen som ska användas – förmodligen modulenmysite.wsgi
somstartproject
skapar.env
: Bör förmodligen innehålla minstDJANGO_SETTINGS_MODULE
.home
: Valfri sökväg till projektets virtuella miljö.
Exempel på ini-konfigurationsfil:
[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
Exempel på användning av konfigurationsfilen ini:
uwsgi --ini uwsgi.ini
Åtgärdar UnicodeEncodeError
för filuppladdningar
Om du får ett UnicodeEncodeError
när du laddar upp filer med filnamn som innehåller icke-ASCII-tecken, se till att uWSGI är konfigurerad att acceptera icke-ASCII-filnamn genom att lägga till detta i din uwsgi.ini
:
env = LANG=en_US.UTF-8
Se avsnittet Filer i Unicode-referensguiden för mer information.
Se uWSGI-dokumenten om hantering av uWSGI-processen för information om hur du startar, stoppar och laddar om uWSGI-arbetarna.