After upgrading from django 1.5.5 to django 1.7 i couldn't make gunicorn work. It kept telling me (when running bin/django run_gunicorn -c config/gunicorn)
After some time I've got working solution for my case. I took code http://gunicorn-docs.readthedocs.org/en/latest/custom.html
HaltServer Worker failed to boot: 3and
bin/django runserverworks fine.
After some time I've got working solution for my case. I took code http://gunicorn-docs.readthedocs.org/en/latest/custom.html
As you can see at L06 I have parse func. I am using buildout, which creates django and django.wsgi files in bin/ directory. And in these files sys.path is changed to make your app be able to locate eggs, which are located in eggs/ dir. (e.g. eggs/Django-1.7-py2.7.egg). So gevent is also located there (eggs/gevent-1.0.1-py2.7-linux-x86_64.egg) in my case. So I have to change sys.path, then I do monkey patching with gevent and then with gevent_psycopg2 since I'm using postgresql.
#!/usr/bin/python
from __future__ import unicode_literals
import sys
def parse():
s = False
result = []
with open("bin/django.wsgi", "r") as f:
for line in f.readlines():
if line.startswith("sys.path[0:0]"):
s = True
continue
if "]" in line:
break
if s:
result.append(line.strip()[1:-2])
return result
sys.path[0:0] = parse()
import gevent.monkey
gevent.monkey.patch_all()
import gevent_psycopg2
gevent_psycopg2.monkey_patch()
import multiprocessing
import gunicorn.app.base
from gunicorn.six import iteritems
def number_of_workers():
return (multiprocessing.cpu_count() * 2) + 1
class StandaloneApplication(gunicorn.app.base.BaseApplication):
def __init__(self, app, options=None):
self.options = options or {}
self.application = app
super(StandaloneApplication, self).__init__()
def load_config(self):
config = dict([(key, value) for key, value in iteritems(self.options)
if key in self.cfg.settings and value is not None])
for key, value in iteritems(config):
self.cfg.set(key.lower(), value)
def load(self):
return self.application
if __name__ == '__main__':
options = {
'bind': '%s:%s' % ('0.0.0.0', '8000'),
'workers': number_of_workers(),
'worker_class': "gunicorn.workers.ggevent.GeventWorker",
'debug': True
}
import djangorecipe.wsgi
application = djangorecipe.wsgi.main('homecont.development', logfile='')
StandaloneApplication(application, options).run()