Django populate()不是可重入的

ip.*_*ip. 30 python apache 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
Run Code Online (Sandbox Code Playgroud)

Dir*_*ler 33

升级到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)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅modwsgi上的此主题.

  • 谢谢.这对我有用,可以找到实际问题. - :) (2认同)

ip.*_*ip. 6

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

WSGIDaemonProcess ...
WSGIProcessGroup ...
Run Code Online (Sandbox Code Playgroud)

刚刚了解到你可以在没有定义它们的情况下运行单个django应用程序,但是当它们两者产生冲突时.