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.
Published 22.2.2011