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. So
pythonpath = '/home/code/po'
django_settings = 'po.settings'
To 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 gunicorn
export PYTHONPATH=/home/code
gunicorn -w 2 views:application
So 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 called application
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With