Hi I am trying to integrate my django 1.4.1 app with Gunicorn 0.14.6. I start gunicorn server from command line like so -
gunicorn -c /home/code/gunicorn_config.py
I get this traceback -
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 459, in spawn_worker
worker.init_process()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 99, in init_process
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 101, in wsgi
self.callable = self.load()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 24, in load
return util.import_app(self.app_uri)
File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 292, in import_app
app = eval(obj, mod.__dict__)
File "<string>", line 1, in <module>
NameError: name 'application' is not defined
Where am i going wrong? Whats this application
variable & where do I need to modify this?
Also since I am using Django1.4.1 I have a wsgi.py
file already in my project, do I need to change that?
UPDATE: here is my gunicorn_config.py
file contents -
import os
import sys
import multiprocessing
def app_path():
sys.path.append('/home/code/po/')
sys.path.append('/home/code/po/ball/')
return
def num_cpus():
cpus = 0
try:
cpus = os.sysconf("SC_NPROCESSORS_ONLN")
except:
cpus = multiprocessing.cpu_count()
if cpus: return cpus
else: return 3
#defining the behavior of gunicorn
app_path()
bind = "127.0.0.1:8080"
workers = num_cpus()*2 + 1
debug = True
daemon = False
accesslog = '/home/code/logs/guni_access.log'
errorlog = '/home/code/logs/guni_error.log'
loglevel = 'debug'
django_settings = '/home/code/po/po/'
pythonpath = '/home/code/po/'
@moopet - i dont even think that wsgi.py
file is called, how do i make gunicorn pick that file ?
Your
django_settings
is incorrect.django_settings
should be in the form of a python module import that is importable from the Python path you set. SoTo elaborate a bit more,
application
is the default variable (which should be a WSGI application object) gunicorn will try and import from the Python module that you supply.So to think about it another way. Say you were trying to run a simple Flask wsgi appication. The actual WSGI app was defined as
application
and lived inside/home/code/views.py
. Then the following would manually start serving it with gunicornSo the variable application inside the views module. You can read about how Django provides you with the application object.
It might be that you need to point gunicorn at the
po.wsgi
module itself. It's a little hard to tell from the information provided so far. If that module was created properly it should contain a variable calledapplication
Check if another package you have installed already contains a file called wsgi.py. (gevent does.) If so, likely the wrong wsgi.py file is being loaded. Try renaming your wsgi.py file to something else (e.g. app_wsgi.py) and add run your app using