当我尝试在生产中加载我的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
答案 0 :(得分:29)
这个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上的this thread。
答案 1 :(得分:6)
最后我遇到的问题是我试图运行第二个Django应用程序并且在我的apache配置中没有定义以下内容:
WSGIDaemonProcess ...
WSGIProcessGroup ...
刚刚了解到你可以运行单个django应用程序而无需定义它们,但是当它们两者产生冲突时。
答案 2 :(得分:3)
导致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应该是原始的。这意味着如果其中一个配置不正确或需要库丢失,则会出现此填充错误。我收到此错误是因为我错过了sqlite安装。即使你看到在例外中没有提到可能的原因。我在debian上用这个命令安装了sqlite
pip install pysqlite
它解决了我的问题。我的例外是因为缺少pysqlite.Your可能缺少您settings.py
答案 3 :(得分:1)
完全公开 - “populate()不可重入”错误可能有多种原因,检查任何最近的配置或程序更改是一个非常好的主意。
但是,更新Apache时,也会发生此错误,并且模块不再有效/已损坏/需要刷新。在Apache更新后,我们在Webfaction上发生了这种情况(但可能在任何主机上发生)。
使用Apache重启脚本对此没有帮助,因为模块在重启时仍然加载。根据您的系统,以及即使Apache关闭也是否缓存mod,这可能有所帮助。
完全停止Apache。在Webfaction上,即:
~/webapps/<YOUR WEB APP>/apache2/bin/stop
等几秒钟,然后......
~/webapps/<YOUR WEB APP>/apache2/bin/start
那应该纠正这个问题。如果您的系统缓存了mod,则可能必须在启动之前刷新缓存。
希望这有帮助!
以下是他们给我的链接(我知道错误不同,但我们也出现了与填充错误相同的原因):
答案 4 :(得分:0)
对于那些使用 AWS Lambda (以及可选地使用zappa)的人来说,这可能发生在代码大小和&amp;压缩后,压缩到部署包中的依赖项超过250MB。
通常,zip可能只有50 MB,但可能会解压缩到超过250 MB,因此您可能需要手动解压缩部署包,以确保它在未压缩时不会太大。
答案 5 :(得分:0)
对我来说,造成此错误是因为我没有正确地将INSTALLED_APPS
分为本地和生产。在本地,我使用django-cors-headers
,而在生产中,我没有使用。但是,即使我从产品django-cors-headers
中删除了requirements.txt
,我还是意外地离开了它。从生产中已安装的应用中删除cors-headers
后,错误消失了。