Django-sovellusten käynnistäminen Upstartissa Gunicornilla aiheuttaa joskus harmaita hiuksia. Olen havainnut Upstartin toimivan parhaiten siten, että Gunicornia ei ajeta daemonina, vaan tavallisena prosessina.
Tässä on hiljattain pystyttämäni Review Board -saitin upstart-konfiguraatio:
description "Review Board"
author "Kenneth Falck <kennu@iki.fi>"
start on (net-device-up and local-filesystems)
stop on shutdown
respawn
script
export HOME="/var/www/review"
export PATH="$PATH:/var/www/review/ve_review/bin"
export DJANGO_SETTINGS_MODULE="reviewboard.settings"
export LANG="en_US.UTF-8"
export PYTHONPATH="$HOME/conf"
cd "$HOME/htdocs"
exec /var/www/review/ve_review/bin/gunicorn_django -b unix:/tmp/gunicorn_review.sock -w 1 –log-file /var/log/gunicorn-reviewboard.log
end script
Avainkohdat tässä ovat:
- Start on -direktiivi odottaa koneen käynnistyksen yhteydessä ensin, että verkko ja levyjärjestelmä ovat käytettävissä.
- Tarvittavat ympäristömuuttujat asetetaan script-osion alussa.
- Palvelinprosessi käynnistetään viimeisellä rivillä exec-komennolla.
- Gunicornin parametreissä _ei_ anneta -D -optiota (daemonize).
- Vastaavasti Upstartille ei anneta "expect fork" tai "expect daemon" -direktiivejä, vaan ainoastaan respawn, joka käynnistää prosessin tarvittaessa uudelleen.
- Virtualenv ei tarvitse sen kummempaa aktivointia, vaan riittää, että gunicorn_django-komento käynnistetään suoraan oikeasta hakemistosta halutun virtualenvin alta.