Django populate()不可重入

2024-06-06 01:04:40 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图将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

Tags: djangoinpywsgigetapplicationlibpackages
3条回答

在升级到Django 1.7之后,第一次出现这个运行时错误(Django 1.8仍然存在)。它通常是由Django应用程序引起的,该应用程序会引发一个错误,但该错误会以某种方式被忽略。

这是一个对我有效的解决方法。将其添加到wsgi.py中,应记录real错误:

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上的this thread

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

WSGIDaemonProcess ...
WSGIProcessGroup ...

刚刚了解到,你可以运行一个django应用程序而不必定义它们,但当它的两个应用程序产生冲突时。

会有很多原因导致populate() isn't reentrant错误。如果您查看in django应用程序中的registry.py可能在这个目录中

        # 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应该是原始的。这意味着,如果其中一个配置不正确或缺少必需的库,则会引发此填充错误。我得到这个错误是因为我错过了sqlite安装。即使如您所见,在异常中也没有提到可能的原因。我通过这个命令在debian上安装了sqlite

pip install pysqlite

它解决了我的问题。我的异常是因为缺少pysqlite。您的settings.py中可能缺少其他必需的包或错误

相关问题 更多 >