当我尝试在生产环境中加载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
7条答案
按热度按时间sh7euo9m1#
这个RuntimeError是在我升级到Django 1.7之后第一次出现的(现在Django 1.8仍然存在)。它通常是由Django应用程序引起的,它引发了一个错误,但该错误以某种方式被吞下。
这里有一个适合我的变通方法。将其添加到您的wsgi.py,并记录 * 真实的 * 错误:
查看modwsgi上的这篇文章了解更多细节。
pgx2nnw82#
最后,我遇到的问题是,我试图运行第二个Django应用程序,但在我的apache配置中没有定义以下内容:
刚刚了解到你可以运行一个Django应用程序而不定义它们,但是当它是两个时,它会产生冲突。
zqry0prt3#
会有很多原因导致
populate() isn't reentrant
错误。如果你在django应用程序中查看registry.py
,可能就在这个目录中。/python2.7/site-packages/django/apps
正如你在评论中看到的,它说app_config应该是原始的。这意味着如果其中一个配置不正确或缺少所需的库,则会出现此填充错误。我得到这个错误,因为我错过了sqlite安装。即使如您所见,异常中也没有提到可能的原因。我在debian上用这个命令安装了sqlite
它解决了我的问题。我的例外,因为失踪pysqlite.你可能有失踪的另一个所需的软件包或错误,在您的
settings.py
goucqfw64#
对于使用AWS Lambda(以及可选地使用zappa)的用户,当压缩到部署包中的代码和依赖项的大小在解压缩后超过250 MB时,可能会发生这种情况。
通常,zip可能只有50 MB,但可能会超过250 MB,因此您可能需要手动解压缩部署包,以检查它在解压缩时是否太大。
https://docs.aws.amazon.com/lambda/latest/dg/limits.html
vbkedwbf5#
充分披露-“populate()isn 't reentrant”错误可能有多种原因,检查任何最近的配置或程序更改是一个非常好的主意。
但是,当Apache更新时,并且模块不再有效/已损坏/需要刷新时,也可能发生此错误。这发生在Apache更新后的Webfaction上(但可能发生在任何主机上)。
使用Apache重新启动脚本对此没有帮助,因为模块在重新启动时仍处于加载状态。这可能会有所帮助,具体取决于您的系统,以及即使在Apache关闭时是否缓存了MOD。
完全停止Apache。在WebFaction上,这是:
再等几秒钟,然后...
这应该可以纠正这个问题。如果你的系统缓存了mod,你可能需要在启动前刷新该高速缓存。
希望这对你有帮助!
这是他们给我的链接(我知道错误是不同的,但我们也有同样的原因与填充错误):
https://statusblog.webfaction.com/2018/05/16/regarding-glibc_private-errors-in-your-python-application/
pgvzfuti6#
对我来说,这个错误是因为我没有正确地将我的
INSTALLED_APPS
分为本地和生产。这意味着在本地我使用django-cors-headers
,而在生产中我没有。但是我意外地留下了django-cors-headers
,尽管我从生产requirements.txt
中删除了它。从生产中安装的应用程序中删除cors-headers
后,错误消失了。tpgth1q77#
我明白了,很多评论都是关于隐藏的问题,
populate()不是可重入的
并不是一个原始的问题。在我的情况下,我已经改变了密码在我的本地数据库的主用户,我忘记改变数据库设置在另一个项目。