First time here? Check out the FAQ!
0

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

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)
daveg's avatar
1
daveg
asked 2012-11-29 14:03:50 -0500
Evgeny's avatar
13.2k
Evgeny
updated 2012-11-29 14:09:31 -0500
edit flag offensive 0 remove flag close merge delete

Comments

add a comment see more comments

2 Answers

0

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
tynesjo's avatar
1
tynesjo
answered 2013-03-08 07:20:15 -0500
edit flag offensive 0 remove flag delete link

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's avatar Evgeny (2013-03-08 14:04:06 -0500) edit
add a comment see more comments
0

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.

Evgeny's avatar
13.2k
Evgeny
answered 2012-11-29 14:12:37 -0500
edit flag offensive 0 remove flag delete link

Comments

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

daveg's avatar daveg (2012-11-29 14:46:03 -0500) edit

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

Evgeny's avatar Evgeny (2012-11-29 17:57:42 -0500) edit

So what would be the fix for it?

daveg's avatar daveg (2012-11-29 18:29:51 -0500) 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's avatar Evgeny (2012-11-29 18:38:53 -0500) edit

Downgraded to 0.7.43 and gunicorn_django is working again

daveg's avatar daveg (2012-11-29 19:09:19 -0500) edit
add a comment see more comments