Ask Your Question
0

Why askbot works with runserver, but fails with production server?

asked 2012-11-29 14:03:50 -0600

daveg gravatar image

updated 2012-11-29 14:09:31 -0600

Evgeny gravatar image

I'm trying to run askbot 0.7.44 under gunicorn. When I startup askbot using manage.py, it works:

$ python askbotsite/manage.py runserver
Validating models...

WARNING!!! You are using a 'locmem' (local memory) caching backend,
which is OK for a low volume site running on a single-process server.
For a multi-process configuration it is neccessary to have a production
cache system, such as redis or memcached.

With local memory caching and multi-process setup you might intermittently
see outdated content on your site.

0 errors found
Django version 1.4.2, using settings 'askbotsite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

But if I try to start it up using gunicorn_django, it fails (this worked in 0.7.43):

$ gunicorn_django 
2012-11-29 19:58:21 [25585] [INFO] Starting gunicorn 0.16.1
2012-11-29 19:58:21 [25585] [INFO] Listening at: http://127.0.0.1:8000 (25585)
2012-11-29 19:58:21 [25585] [INFO] Using worker: sync
2012-11-29 19:58:21 [25589] [INFO] Booting worker with pid: 25589
2012-11-29 19:58:22 [25589] [ERROR] Exception in worker process:
Traceback (most recent call last):
  File "/opt/askbot/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 469, in spawn_worker
    worker.init_process()
  File "/opt/askbot/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 100, in init_process
    self.wsgi = self.app.wsgi()
  File "/opt/askbot/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 99, in wsgi
    self.callable = self.load()
  File "/opt/askbot/local/lib/python2.7/site-packages/gunicorn/app/djangoapp.py", line 101, in load
    return mod.make_wsgi_application()
  File "/opt/askbot/local/lib/python2.7/site-packages/gunicorn/app/django_wsgi.py", line 36, in make_wsgi_application
    if get_validation_errors(s):
  File "/opt/askbot/local/lib/python2.7/site-packages/django/core/management/validation.py", line 35, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/opt/askbot/local/lib/python2.7/site-packages/django/db/models/loading.py", line 146, in get_app_errors
    self._populate()
  File "/opt/askbot/local/lib/python2.7/site-packages/django/db/models/loading.py", line 61, in _populate
    self.load_app(app_name, True)
  File "/opt/askbot/local/lib/python2.7/site-packages/django/db/models/loading.py", line 76, in load_app
    app_module = import_module(app_name)
  File "/opt/askbot/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/opt/askbot/local/lib/python2.7/site-packages/django/contrib/admin/__init__.py", line 6, in <module>
    from django.contrib.admin.sites import AdminSite, site
  File "/opt/askbot/local/lib/python2.7/site-packages/django/contrib/admin/sites.py", line 3, in <module>
    from django.contrib.admin import ModelAdmin, actions
ImportError: cannot import name actions
Traceback (most recent call last):
  File "/opt/askbot/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 469, in spawn_worker
    worker.init_process()
  File "/opt/askbot/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 100, in init_process
    self.wsgi = self.app.wsgi()
  File "/opt/askbot/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 99 ...
(more)
edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
0

answered 2012-11-29 14:12:37 -0600

Evgeny gravatar image

This issue is probably always due to differences in python paths available for the development and production servers.py

You can try printing "sys.path" at the top of your settings.py and comparing output under the two environments.

Try adding something like:

import sys
sys.stderr.write('\n'.join(sorted(sys.path)))

Then check out console/error log.

edit flag offensive delete link more

Comments

Both commands are run from the same virtualenv: https://gist.github.com/2d81a2e6afa3aa81bd2b

daveg gravatar imagedaveg ( 2012-11-29 14:46:03 -0600 )edit

Your python paths don't seem to be the same in the two cases.

Evgeny gravatar imageEvgeny ( 2012-11-29 17:57:42 -0600 )edit

So what would be the fix for it?

daveg gravatar imagedaveg ( 2012-11-29 18:29:51 -0600 )edit

Maybe look at gunicorn documentation about setting python path. It is a common problem with deployments that path in the server environment are different from your development environment.

Evgeny gravatar imageEvgeny ( 2012-11-29 18:38:53 -0600 )edit

Downgraded to 0.7.43 and gunicorn_django is working again

daveg gravatar imagedaveg ( 2012-11-29 19:09:19 -0600 )edit
0

answered 2013-03-08 07:20:15 -0600

tynesjo gravatar image

I confirm the same problem using askbot 0.7.47 and gunicorn 0.17.2

While not diagnosed I note the problem goes away, in my experience, if you add gunicorn as an installed app in settings.py and instead launch gunicorn using:

python ./manage.py run_gunicorn
edit flag offensive delete link more

Comments

This issue is always related to python paths being different in the two environments as I said in my answer. It is a 100% deployment issue.

Evgeny gravatar imageEvgeny ( 2013-03-08 14:04:06 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2012-11-29 14:03:50 -0600

Seen: 2,013 times

Last updated: Mar 08 '13