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.