Getting uWSGI + init.d playing nicely on Ubuntu 11.10

1 min, 4 secs. 235 words


A few weeks ago, I wanted to install uWSGI on my Ubuntu 11.10 box for http://allb.us.  After having gone through the standard aptitude/pip installs to get uwsgi installed, I noticed after running the init.d scripts, absolutely nothing would happen.

zip. nada. zilch.

No log file + no uwsgi process == a lot of sad pandas.

After having searched stackoverflow, it was quite apparent that I wasn’t the only unlucky soul to encounter this error.  To debug the uwsgi init.d script, I used the trusty set -xv trick atop to see the omgwtfbbqs.

Here’s a few things I realized:

  • The configuration file in /etc/uwsgi/apps-enabled must contain one of the recognized uwsgi configuration file extensions.  Initially, I symlinked my configuration file from the apps-available directory as allbus.  It didn’t like that at all.  I renamed the symlink to allbus.xml.
  • The start-stop-daemon in the init.d script is being passed the location to the pid file via –pid-file instead of being told to create the pid file via the –make-pid-file option.  Thus, you need to make sure your uwsgi configuration file contains a directive to create the file at the same location the init.d script is looking for it.  Note: Take a look at the <pidfile> configuration.

Here’s a gist I created of the xml uwsgi configuration I used for my Django application. Hopefully it helps save someone from the hour I spent in startup script hell.

Enjoy! :D

<uwsgi>
<socket>127.0.0.1:12345</socket>
<pythonpath>/home/apps/allbus/current</pythonpath>
<module>wsgi</module>
<plugins>python</plugins>
<processes>1</processes>
<pidfile>/var/run/uwsgi/%n/pid</pidfile>
<daemonize/>
<uid>33</uid>
<gid>33</gid>
<enable-threads/>
<master/>
<harakiri>120</harakiri>
<max-requests>5000</max-requests>
</uwsgi>
view raw uwsgi.xml hosted with ❤ by GitHub