A wrapper around gunicorn to handle graceful restarts correctly
rainbow-saddle is a wrapper around Gunicorn to simplify code reloading without dropping requests.
Install from pypi:
$ sudo pip install rainbow-saddle
Or from source:
$ sudo ./setup.py install
Sometimes doing a kill -HUP <gunicorn PID> is not sufficient to reload your code. For example it doesn’t work well if you host your code behind a symlink, or if a .pth in your installation is updated to point to a different directory.
The correct way to reload code in such situations is a bit complicated:
# Reexec a new master with new workers /bin/kill -s USR2 `cat "$PID"` # Graceful stop old workers /bin/kill -s WINCH `cat "$PIDOLD"` # Graceful stop old master /bin/kill -s QUIT `cat "$PIDOLD"`
It also has the downside of changing the “master” process PID, which confuses tools such as supervisord.
rainbow-saddle handles all of this for you, and never changes its PID. Reloading code becomes as simple as sending a SIGHUP again:
$ rainbow-saddle --pid /tmp/mysite.pid gunicorn_paster development.ini --log-level debug $ kill -HUP `cat /tmp/mysite.pid`
Minor Python3 compatibility fix, thanks to Justin Locsei.
Thanks to Rafael Floriano da Silva for the following:
- add –gunicorn-pidfile
- fix race condition for slow starting apps
- update psutil