Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django populate() isn't reentrant

I keep getting this when I try to load my Django application on production . I tried all the stackoverflow answers but nothing has fixed it. Any other ideas. (I'm using Django 1.5.2 and Apache)

 Traceback (most recent call last):
         File "/var/www/thehomeboard/wwwhome/wsgi.py", line 37, in <module>
           application = get_wsgi_application()
         File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 14, in get_wsgi_application
           django.setup()
         File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 18, in setup
           apps.populate(settings.INSTALLED_APPS)
         File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 78, in populate
           raise RuntimeError("populate() isn't reentrant")
       RuntimeError: populate() isn't reentrant
like image 334
ip. Avatar asked Jun 20 '15 13:06

ip.


2 Answers

This RuntimeError first occured for me after upgrading to Django 1.7 (and still is present with Django 1.8). It is usually caused by an Django application which raises an error, but that error is swallowed somehow.

Here's a workaround which works for me. Add it to your wsgi.py and the real error should be logged:

import os
import time
import traceback
import signal
import sys
from django.core.wsgi import get_wsgi_application

try:
    application = get_wsgi_application()
    print 'WSGI without exception'
except Exception:
    print 'handling WSGI exception'
    # Error loading applications
    if 'mod_wsgi' in sys.modules:
        traceback.print_exc()
        os.kill(os.getpid(), signal.SIGINT)
        time.sleep(2.5)

See this thread on modwsgi for more details.

like image 166
Dirk Eschler Avatar answered Nov 18 '22 23:11

Dirk Eschler


In the end the problem that I had was that I tried to run a second Django app and did not have the following defined in my apache config:

WSGIDaemonProcess ...
WSGIProcessGroup ...

Just learned that you can run a single django app without defining them but when its two it produces a conflict.

like image 6
ip. Avatar answered Nov 18 '22 22:11

ip.