当我尝试在生产环境中加载我的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
这个RuntimeError在升级到Django 1.7之后首先发生了(而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)
有关更多详细信息,请参阅modwsgi上的此主题 。
最后我遇到的问题是我试图运行第二个Django应用程序,并没有在我的apache配置中定义以下内容:
WSGIDaemonProcess ... WSGIProcessGroup ...
刚刚得知您可以运行一个django应用程序,而不需要定义它们,但是当它发生冲突时就会运行它。
导致populate() isn't reentrant
原因有很多populate() isn't reentrant
错误。 如果你在你的django应用程序中查看这个目录下的registry.py
/python2.7/site-packages/django/apps
# app_config should be pristine, otherwise the code below won't # guarantee that the order matches the order in INSTALLED_APPS. if self.app_configs: raise RuntimeError("populate() isn't reentrant")
正如你在评论中看到的那样,app_config应该是原始的。 这意味着,如果其中一个配置不正确,或者需要库丢失,将会增加这个填充错误。 我得到这个错误,因为我已经错过了安装。 即使如你所见,在例外情况中也没有提及可能的原因。 我在debian上通过这个命令安装了sqlite
pip install pysqlite
它解决了我的问题。 我的例外,因为缺少pysqlite.Your可能有缺少另一个必需的包或在settings.py
错误