Getting uWSGI + init.d playing nicely on Ubuntu 11.10
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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> |