一尘不染

Django populate()不可重入

django

当我尝试在生产环境中加载Django应用程序时,我会不断收到此消息。我尝试了所有stackoverflow答案,但没有任何解决方法。还有其他想法。(我正在使用Django 1.5.2和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

阅读 363

收藏
2020-03-28

共2个答案

一尘不染

我遇到的问题是我尝试运行第二个Django应用程序,而我的apache配置中没有定义以下内容:

WSGIDaemonProcess ...
WSGIProcessGroup ...

你可以运行一个django应用程序而无需定义它们,但是当两个应用程序产生冲突时。

2020-03-28
一尘不染

升级到Django 1.7之后,我第一次发生了RuntimeError,但Django 1.8仍然存在。它通常是由Django应用程序引起的,该应用程序引发了一个错误,但是该错误被某种方式吞没了。

这是一种对我有效的解决方法。将其添加到你的wsgi.py中,并记录真正的错误:

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)
2020-03-28