Django停止使用RuntimeError:populate()不可重入

时间:2014-11-23 20:11:14

标签: django apache mod-wsgi django-wsgi

我一直在使用WSGI开发部署在Apache服务器上的Django Web应用程序,一切都进展顺利。今天,我对我的应用程序的admin.py进行了一些小的更改,试图自定义内置的Django Admin界面,并且最初产生了语法错误(一个未闭合的括号)。这意味着当我触摸wsgi.py并加载代码(我在我的虚拟主机上以守护进程模式运行WSGI)时,我的网站被替换为内部服务器错误,因为WSGI在遇到语法错误时停止。

所以我修复了语法错误,检查了manage.py check我没有更多内容,并触及wsgi.py重新部署。但我的网站仍然显示内部服务器错误!检查Apache日志,这就是我所看到的:

[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Create interpreter 'quotes.cs.cornell.edu|'.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/extra/www/html/quotes/quotes_django' to path.
[Sun Nov 23 13:52:46 2014] [info] mod_wsgi (pid=19093): Adding '/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/' to path.
[Sun Nov 23 13:52:46 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
  application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/
quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Exception occurred processing WSGI
script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] Traceback (most recent call last):
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/extra/www/html/quotes/quotes_django/
quotes_django/wsgi.py", line 14, in <module>
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     application = get_wsgi_application()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     django.setup()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/__init__.py", line 21, in setup
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     apps.populate(settings.INSTALLED_APPS)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/apps/registry.py", line 115, in populate
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     app_config.ready()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/contrib/admin/apps.py", line 22, in ready
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     self.module.autodiscover()
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/contrib/admin/__init__.py", line 23, in autodiscover
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     autodiscover_modules('admin', register_to=site)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/utils/module_loading.py", line 74, in autodiscover_modules
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     import_module('%s.%s' % (app_config.name,         
module_to_search))
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/usr/lib64/python2.7/importlib/__init__.py", line 
37, in import_module
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     __import__(name)
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]   File "/extra/www/html/quotes/quotes_django/quotespage/
admin.py", line 25
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]     approve_quotes.short_description = "Approve selected
quotes"
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]                  ^
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] SyntaxError: invalid syntax
[Sun Nov 23 13:53:36 2014] [info] [client 128.84.33.19] mod_wsgi (pid=19093, process='quotes.cs.cornell.edu',
  application='quotes.cs.cornell.edu|'): Loading WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/
wsgi.py'.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Target WSGI script '/extra/www/html/
quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] mod_wsgi (pid=19093): Exception occurred processing WSGI
script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] Traceback (most recent call last):
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/extra/www/html/quotes/quotes_django/         
quotes_django/wsgi.py", line 14, in <module>
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     application = get_wsgi_application()
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     django.setup()
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/__init__.py", line 21, in setup
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     apps.populate(settings.INSTALLED_APPS)
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-
packages/django/apps/registry.py", line 78, in populate
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19]     raise RuntimeError("populate() isn't reentrant")
[Sun Nov 23 13:53:36 2014] [error] [client 128.84.33.19] RuntimeError: populate() isn't reentrant

由于admin.py中的语法错误,第一系列错误显示WSGI失败。但是,第二系列错误似乎表明Django内部存在错误:

RuntimeError: populate() isn't reentrant

来自populate的{​​{1}}方法。

谷歌搜索此错误消息返回的信息非常少,没有来自Django文档。显然,如果您在registry.py中为应用程序命名两次,有时会发生这种情况,但我不是这样做的。更重要的是,自从网站工作正常以来我没有改变settings.py - 我唯一改变的是settings.py

我尝试恢复我所做的所有更改,因此我的所有Python代码都恢复到网站运行时的状态 - 当我尝试使WSGI重新加载时,我仍然遇到admin.py错误代码!

我还尝试在populate() isn't reentrant的INSTALLED_APPS部分中注释掉不同的应用,即使只启用了'django.contrib.staticfiles',错误仍然会发生。奇怪的是,即使我评论所有应用程序,我仍然会收到错误 - 即使没有加载任何应用程序,Django也会抛出错误!

有谁知道这里发生了什么?或者我有更好的方法来调试此错误,因为Apache日志中的回溯非常无用吗?

注意:我正在使用Django 1.7,Apache 2.2和Python 2.7。

37 个答案:

答案 0 :(得分:56)

我的服务器管理员重新启动了Apache,这神奇地解决了这个问题。加载完全相同的Python文件而不会导致populate() isn't reentrant。我甚至尝试加载另一个语法错误的文件,然后修复它,服务器能够加载新文件并正确运行没有问题。

我仍然不知道出了什么问题,但是由于问题已经消失,我将此标记为已回答。 (好吧,只要StackOverflow允许我接受我自己的答案,我就会将其标记为已回答。)

更新:在我意外上传带有语法错误的Python后继续出现此错误后,我想出了一个比重启Apache更容易的解决方法。当WSGI开始抛出populate() isn't reentrant错误时,我用这个简单的函数替换我的Django项目的wsgi.py

def application(environ, start_response):
    if environ['mod_wsgi.process_group'] != '': 
        import signal
        os.kill(os.getpid(), signal.SIGINT)
    return ["killed"]

然后我重新加载我的网站,并重新启动WSGI守护进程(我可以通过查看Apache日志来判断,即使网站仍然显示相同的500错误)。

如果我然后将wsgi.py更改回正常并重新加载,WSGI会成功获取我的代码而不会抛出populate() isn't reentrant(假设这次没有语法错误)。因此整个Apache不需要重启,只需要重启WSGI进程,而且我可以在没有root权限的情况下重启。

答案 1 :(得分:30)

我知道这是一个陈旧的答案,但我会为我的解决方案做出贡献:

作为一种诊断问题根源的方法,请运行manage.py check并查看是否有任何内容

在我的情况下,过时的要求是问题,并且django未能导入子模块

确保您的要求是最新的

答案 2 :(得分:9)

如果您在使用Google App Engine时遇到此错误,请检查日志中是否存在可能导致此问题的其他错误。我得到了:

ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3

您无法将SQLite与Google App Engine结合使用,因此请DATABASES settings.py部分注释掉该错误以及RuntimeError("populate() isn't reentrant")错误。

答案 3 :(得分:4)

您可以通过触摸加载过程中早期的文件(wsgi.py除外)重新启动Apache,也可以修复它。例如,您的设置文件:

$ touch settings.py

我也没有正确解决这个问题,但在我的问题中有更多信息:Code change monitoring malfunctioning with Django 1.7 on mod-wsgi

答案 4 :(得分:4)

这不是回应,而是反思。

当你升级到django 1.7并且你有500错误并重新加载你的页面时,Apache说“populate()不是可重入的”。 我认为这是在你加载你的页面时,Apache加载你的应用程序所需的所有模块,当错误处理时它不会卸载模块。因此,当您重新加载页面时,apache会再次加载这些模块,但它已经加载了。所以,apache说“populate()不是可重入的”。

我有两个操作来纠正这个问题:重启apache,或者更正处理第一个5OO错误的错误。

我希望它会对你有所帮助。

答案 5 :(得分:3)

我遇到了同样的问题,我的错误来源只是我正在使用的文件中的语法错误。修正拼写错误后,populate() is not reentrant错误消失了。

如果从wsgi脚本运行django,您可以通过从命令行运行wsgi脚本来识别拼写错误。例如:

cd /usr/local/www/wsgi-scripts/
python djangolauncher.wsgi

答案 6 :(得分:3)

Apache将wsgi文件存储在其缓存中。 Disable Apache caching of python files

首先删除wsgi文件并重新启动acpache,然后再次添加wsgi文件并重新启动apache。

答案 7 :(得分:3)

对于同一个Apache mod-wsgi错误,这看起来像一个很好的有效响应集合,每个人发布一个适合他/她的那个,所以这是我的:

部署后不要忘记更新项目要求:)

答案 8 :(得分:2)

设置:Ubuntu 14.04,Django 1.10,Python 3.5(在virtualenv中)。

我没有运气尝试了很多这些解决方案,但后来我注意到Apache错误日志在我的情况下包含两个不同的错误。当有人试图访问某个页面时会发生这种情况,另一个会在启动时发生。我错过了创业公司,因为我经常尝试刷新页面几次,因此只看到访问错误重复了几次。

然后我搜索了启动错误的解决方案以及this question worked for me的解决方案。简而言之,它涉及以迂回方式更新mod_wsgi包。

我几个月来一直收到有关mod_wsgi版本不匹配的警告,但突然间它导致Apache错误500。对我没有任何意义。

我的猜测是这个RuntimeError: populate() isn't reentrant错误通常表示应该查找启动错误,这表明存在真正的问题。

访问

[Sat Oct 15 03:38:08.900966 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Target WSGI script '/django/GP/GP/wsgi.py' cannot be loaded as Python module.
[Sat Oct 15 03:38:08.901409 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Exception occurred processing WSGI script '/django/GP/GP/wsgi.py'.
[Sat Oct 15 03:38:08.901662 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] Traceback (most recent call last):
[Sat Oct 15 03:38:08.902184 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/GP/GP/wsgi.py", line 16, in <module>
[Sat Oct 15 03:38:08.902217 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     application = get_wsgi_application()
[Sat Oct 15 03:38:08.902501 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Sat Oct 15 03:38:08.902529 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     django.setup(set_prefix=False)
[Sat Oct 15 03:38:08.902726 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/__init__.py", line 27, in setup
[Sat Oct 15 03:38:08.902755 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     apps.populate(settings.INSTALLED_APPS)
[Sat Oct 15 03:38:08.902924 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/apps/registry.py", line 78, in populate
[Sat Oct 15 03:38:08.902953 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     raise RuntimeError("populate() isn't reentrant")
[Sat Oct 15 03:38:08.903111 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] RuntimeError: populate() isn't reentrant

启动

[Sat Oct 15 03:38:08.900966 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Target WSGI script '/django/GP/GP/wsgi.py' cannot be loaded as Python module.
[Sat Oct 15 03:38:08.901409 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] mod_wsgi (pid=28272): Exception occurred processing WSGI script '/django/GP/GP/wsgi.py'.
[Sat Oct 15 03:38:08.901662 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] Traceback (most recent call last):
[Sat Oct 15 03:38:08.902184 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/GP/GP/wsgi.py", line 16, in <module>
[Sat Oct 15 03:38:08.902217 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     application = get_wsgi_application()
[Sat Oct 15 03:38:08.902501 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Sat Oct 15 03:38:08.902529 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     django.setup(set_prefix=False)
[Sat Oct 15 03:38:08.902726 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/__init__.py", line 27, in setup
[Sat Oct 15 03:38:08.902755 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     apps.populate(settings.INSTALLED_APPS)
[Sat Oct 15 03:38:08.902924 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]   File "/django/env/lib/python3.5/site-packages/django/apps/registry.py", line 78, in populate
[Sat Oct 15 03:38:08.902953 2016] [:error] [pid 28272] [remote 95.166.81.114:39651]     raise RuntimeError("populate() isn't reentrant")
[Sat Oct 15 03:38:08.903111 2016] [:error] [pid 28272] [remote 95.166.81.114:39651] RuntimeError: populate() isn't reentrant
[Sat Oct 15 03:38:43.291502 2016] [:error] [pid 28272] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Sat Oct 15 03:38:43.291579 2016] [:error] [pid 28272] Traceback (most recent call last):
[Sat Oct 15 03:38:43.291604 2016] [:error] [pid 28272]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Sat Oct 15 03:38:43.292356 2016] [:error] [pid 28272]     assert tlock is not None
[Sat Oct 15 03:38:43.292377 2016] [:error] [pid 28272] AssertionError: 
[Fri Oct 14 23:38:43.412942 2016] [:error] [pid 28299] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.413044 2016] [:error] [pid 28299] Traceback (most recent call last):
[Fri Oct 14 23:38:43.413076 2016] [:error] [pid 28299]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.425037 2016] [:error] [pid 28275] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.425125 2016] [:error] [pid 28275] Traceback (most recent call last):
[Fri Oct 14 23:38:43.425157 2016] [:error] [pid 28275]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.427625 2016] [:error] [pid 28274] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.427694 2016] [:error] [pid 28274] Traceback (most recent call last):
[Fri Oct 14 23:38:43.427722 2016] [:error] [pid 28274]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.432020 2016] [:error] [pid 28273] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.432078 2016] [:error] [pid 28273] Traceback (most recent call last):
[Fri Oct 14 23:38:43.432105 2016] [:error] [pid 28273]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.438577 2016] [:error] [pid 28299]     assert tlock is not None
[Fri Oct 14 23:38:43.438654 2016] [:error] [pid 28299] AssertionError: 
[Fri Oct 14 23:38:43.442174 2016] [:error] [pid 28274]     assert tlock is not None
[Fri Oct 14 23:38:43.442226 2016] [:error] [pid 28274] AssertionError: 
[Fri Oct 14 23:38:43.447227 2016] [:error] [pid 28276] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.447294 2016] [:error] [pid 28276] Traceback (most recent call last):
[Fri Oct 14 23:38:43.447326 2016] [:error] [pid 28276]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.448813 2016] [:error] [pid 28277] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Fri Oct 14 23:38:43.448876 2016] [:error] [pid 28277] Traceback (most recent call last):
[Fri Oct 14 23:38:43.448903 2016] [:error] [pid 28277]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Fri Oct 14 23:38:43.450188 2016] [:error] [pid 28273]     assert tlock is not None
[Fri Oct 14 23:38:43.450231 2016] [:error] [pid 28273] AssertionError: 
[Fri Oct 14 23:38:43.456680 2016] [:error] [pid 28275]     assert tlock is not None
[Fri Oct 14 23:38:43.456737 2016] [:error] [pid 28275] AssertionError: 
[Fri Oct 14 23:38:43.461761 2016] [:error] [pid 28277]     assert tlock is not None
[Fri Oct 14 23:38:43.461826 2016] [:error] [pid 28277] AssertionError: 
[Fri Oct 14 23:38:43.466165 2016] [:error] [pid 28276]     assert tlock is not None
[Fri Oct 14 23:38:43.466219 2016] [:error] [pid 28276] AssertionError: 
[Fri Oct 14 23:38:43.658971 2016] [mpm_prefork:notice] [pid 28268] AH00169: caught SIGTERM, shutting down
[Sat Oct 15 03:38:43.691909 2016] [:error] [pid 28272] Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
[Sat Oct 15 03:38:43.691968 2016] [:error] [pid 28272] Traceback (most recent call last):
[Sat Oct 15 03:38:43.691996 2016] [:error] [pid 28272]   File "/usr/lib/python3.4/threading.py", line 1288, in _shutdown
[Sat Oct 15 03:38:43.693126 2016] [:error] [pid 28272]     assert tlock is not None
[Sat Oct 15 03:38:43.693159 2016] [:error] [pid 28272] AssertionError: 
[Fri Oct 14 23:38:44.490316 2016] [:warn] [pid 28349] mod_wsgi: Compiled for Python/3.4.0.
[Fri Oct 14 23:38:44.490407 2016] [:warn] [pid 28349] mod_wsgi: Runtime using Python/3.4.3.
[Fri Oct 14 23:38:44.505672 2016] [mpm_prefork:notice] [pid 28349] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.19 mod_wsgi/3.4 Python/3.4.3 configured -- resuming normal operations
[Fri Oct 14 23:38:44.505764 2016] [core:notice] [pid 28349] AH00094: Command line: '/usr/sbin/apache2'

答案 9 :(得分:2)

我知道问题已经有一段时间了,但我刚刚遇到这个问题,因为我在这里没有讨论过这个问题。我在CentOS 7上因为SELinux而出现Dim x = XDocument.Load(strFilePathName) ' Imports System.Xml.Linq x...<DatabaseName>.Value = "stuff" ' or x.Descendants("DatabaseName").Value = "stuff" x.Save(strFilePathName) 错误。我让Django服务于主目录,我只需要启用允许读取主目录的SELinux布尔值,因为populate()错误到期了到权限问题。我的解决方案是RuntimeError: populate() isn't reentrant。我希望这可以帮助有这个问题的人。

答案 10 :(得分:2)

我刚遇到同样的问题所以我开始环顾四周。

现在我已经开始工作,所以我想我应该和你们分享!

我所做的只是重新做chown user:group /to/path -Rchmod 770 /to/path -R而且有效。

答案 11 :(得分:1)

这是由您的Django设置中的某个错误引起的。不幸的是,Django将该错误隐藏在此通用且无用的错误消息背后。

要显示出真正的问题,请打开django/apps/registry.py并在第80行附近替换:

raise RuntimeError("populate() isn't reentrant")

具有:

self.app_configs = {}

这将允许Django继续加载,并显示实际错误。

由于多种原因,我遇到了此错误。曾经是因为我的一个应用程序admin.py中导入错误。

答案 12 :(得分:1)

众多答案清楚地说明了;这是一个通用错误,可能有多个根本原因,通常与加载Apache / WSGI有关。

此页面上的所有这些答案都应该作为一种清单,并且在这种情况下我想添加我的错误实例的根本原因:未能添加&#39; import os&#39;到您的settings.py文件。

具体来说,我们的团队中有一位开发人员打算删除不需要的软件包,而是删除了“导入操作系统”。从生产settings.py文件的顶部。 apache重新启动后,我们的应用程序将无法重新启动,并且我们收到了可怕的&#39; RuntimeError:populate()不可重入&#39;错误。

快速&#39; python manage.py检查&#39;没有透露问题,而是一个&python settings.py&#39;做; os包没有加载。

如果您遇到此错误,请将搜索重点放在检查settings.py文件以及WSGI文件上。

答案 13 :(得分:1)

如果不一致使用代码中的空格和制表符,也会产生此错误。

答案 14 :(得分:0)

对我来说,错误是Requirements.txt文件中缺少mysqlclient软件包。

首先,我使用以下方法安装了mysqlclient软件包:

pip install mysqlclient

然后我使用以下命令更新了requirements.txt文件:

pip freeze > requirements.txt

这解决了我的问题。

答案 15 :(得分:0)

在 apps.py 中,我设置了与我的应用名称不同的名称。

答案 16 :(得分:0)

如果您在开发环境中测试了语法,并且一切正常,那么问题就出在这里

WSGIDaemonProcess celeryEnv python-path=/var/www/celeryEnv/lib/python3.6/site-packages user=apache group=apache python-home=/var/www/celeryEnv

仅看

python-path=/var/www/celeryEnv/lib/python3.6/site-packages

因此 lib64 中的任何模块都不会在apache中识别

我找到了一种解决方法,方法是在/var/www/celeryEnv/lib64复制所有模块/var/www/celeryEnv/lib

现在apache可以在我自己的服务器上运行了

WSGIDaemonProcess domain.com python-path=/home/user/app/env/lib/python3.6/site-packages:/home/user/app

注意:这里已经有一些有用的信息,但是我给出了这个答案,因为我的服务器主要是Centos-7,它们与我的答案一样可以正常工作!

答案 17 :(得分:0)

就我而言,我没有安装 mysqlclient。不幸的是,Django 将错误隐藏在这个通用且无用的错误消息后面。

要揭示真正的问题, 打开 django/apps/registry.py 并围绕 80 行,替换:

$ raise RuntimeError("populate() isn't reentrant") 和: $self.app_configs = {}

然后检查错误,记录以找到实际的错误。 修复并重新启动 apache 服务器。

答案 18 :(得分:0)

我遇到了同样的问题,对我有用的是注释掉/ settings.py中的默认数据库设置。我还读到django的更高版本与ebs不兼容

答案 19 :(得分:0)

关于AWS Elastic Beanstalk的注释:Django-admin编写的默认settings.py包含对本地sqlite数据库作为数据源的引用。这可能会在您的本地操作系统上运行,但不适用于AWS EB,并且会出现populate() isn't reentrant运行时错误。要对此进行测试,只需在DATABASES={<...>}中注释掉settings.py语句,然后部署并重新打开应用程序即可。

答案 20 :(得分:0)

为我重新启动Apache服务器解决了该问题。您可以使用以下命令执行此操作 $ sudo服务apache2重新启动

答案 21 :(得分:0)

我有一个递归的django.setup(),例如,我试图在一个django.setup()中写一个app/models.py,在堆栈跟踪中django试图指出这一点:

... "site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
...
... ./myproject/myapp/models.py ...

是的,请确保在设置django时不要尝试设置django ...

答案 22 :(得分:0)

将我的理由添加到列表中。 对我来说,这是因为我有一个django服务,该服务的名称与进程目录相同。重命名进程/目录可以解决此问题。

答案 23 :(得分:0)

RuntimeError: populate() isn't reentrant

可以是任何东西,这就是为什么这个问题有很多不同答案的原因。

技巧是查看RuntimeError之前的错误消息。在您的情况下,第15行的/extra/www/htmlquotes/quotes_django/quotespage/admin.py文件中似乎存在语法错误,请参见:

Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] File "/extra/www/htmlquotes/quotes_django/quotespage/admin.py", line 25
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] pprove_quotes.short_description = "Approve selected quotes"
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19]                  ^
[Sun Nov 23 13:52:46 2014] [error] [client 128.84.33.19] SyntaxError: invalid syntax

答案 24 :(得分:0)

删除virtualenv目录,重新创建virtualenv,然后重新安装所有修复它的要求。

答案 25 :(得分:0)

在我的情况下,由于缺少必需的pip-package而发生错误。

所以我做了pip install -r requirements.txt,重新启动了apache,然后又恢复了工作。

答案 26 :(得分:0)

就我而言,custom renderer class有一个Django Rest Framework,出于某种目的,我必须覆盖渲染器类的方法“get_context”(完全披露:使django toolbar给出正确的SQL查询计数)

我删除了该课程并重新部署。有效。

答案 27 :(得分:0)

更改此设置的顺序后,我遇到了同样的错误:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

将它重新放在此处的订单上并重新启动apache修复了该问题。

答案 28 :(得分:0)

我遇到了这个问题,在找回我的提交之前,我找不到任何答案。显然我添加了意外导入,因为自动完成,这搞砸了设置。

# found in models.py from msilib.schema import SelfReg

在apache错误日志中: RuntimeError(&#34; populate()不可重入&#34;)

它在我的windows dev环境中工作正常,但在ubuntu / apache服务器上失败了。

答案 29 :(得分:-1)

我最近在django项目[Django1.11]中遇到了相同的错误。

问题是我的应用程序不再位于非标准的Django位置,通常这些应用程序位于根项目目录中

我最近将我的应用程序移到了apps文件夹中以进行日志记录,但是我忘了更新模板。

我的结构[./awesome_potatoes/apps/first_app /]

因此,当我启动一个新应用程序时,由于模板过时,因此django不会在apps.py文件或任何python文件中添加目录名

apps.py

name = 'first_app'

修复[更新我的模板后]

name = 'apps.first_app'

答案 30 :(得分:-1)

我很乐意将此添加为答案,因为它实际上只是相关案例的描述。但是,作为注释似乎并不清晰。

在创建一个无需运行服务器即可访问Django数据库的函数时,我遇到了此错误。通常,这是用来插入测试数据条目的。

我的项目的project/apps/app_one/functions.py文件中包含以下内容:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings")
import django
django.setup()

这允许在不运行服务器的情况下通过Python脚本访问Django数据库。有关此方法的更多信息,请参见此处:https://stackoverflow.com/a/26875729/4573162

我还在该文件中保留了基本的应用程序功能,这些功能不需要数据库访问,可以在服务器运行时使用。例如,在我的app_one.models.py中,我可能有以下从functions.arg_format文件导入的app_name/functions.py函数的用法:

def save(self, *args, **kwargs):
    self.some_arg = functions.arg_format(self.some_arg)
    super().save(*args, **kwargs)

这就是我的应用程序在运行时试图再次运行Django setup()

我不知道的关系如何,但是在我为所有数据库访问功能创建了单独的文件之前,它引发了相同的RuntimeError: populate() isn't reentrant错误。在避免了其他setup()导入之后,迁移能够按预期完成。

答案 31 :(得分:-1)

检查您是否在settings.py的已安装应用程序部分中两次提到了api名称。

应用程序定义

INSTALLED_APPS = [
    ...
    'rest_framework',
    'myapp_api.apps.myappWebserviceApiConfig',
]

应用程序定义

{{1}}

删除重复的条目解决了我的问题

答案 32 :(得分:-1)

我认为当settings.py出现问题时,这是一般性错误。有时,我可以通过逐个删除已安装的应用程序来反复查找问题。在某些情况下,它与已安装的应用程序无关。但根据我的经验,在所有情况下它都是settings.py文件中的问题。

答案 33 :(得分:-1)

投入2欧分:

我在Docker中重新创建了一个工作设置。新的Docker设置失败,

populate isn't reentrant

这似乎是一般错误。 在我的情况下,我忽略了

pip install Django

安装最新版本(2.0),而不是所需的版本1.11。 将此更改为

pip install Django==1.11

解决了我的问题。

答案 34 :(得分:-1)

我解决了将__init__.py添加到我的apps文件夹的问题。

touch /mainprojectfolder/projectfolderwhichcontainswsgi.py/apps/__init__.py

然后它奏效了!

答案 35 :(得分:-1)

在我的情况下,我有一个循环导入,导致错误打破populate方法。

答案 36 :(得分:-4)

你的PC /主机/ VPS缺少内存,释放一些内存,一切都会好的。