Django arbeitet nicht mehr mit RuntimeError: populate () ist nicht wiedereintrittsfähig

122

Ich habe eine Django-Webanwendung entwickelt, die auf einem Apache-Server mit WSGI bereitgestellt wurde, und alles verlief reibungslos. Heute habe ich einige geringfügige Änderungen an meinen Apps vorgenommen admin.py, um die integrierte Django-Administratoroberfläche anzupassen, und zunächst einen Syntaxfehler (eine nicht geschlossene Klammer) vorgenommen. Dies bedeutete, dass wsgi.pymeine Website beim Berühren und Laden des Codes (auf meinem virtuellen Host wird WSGI im Daemon-Modus ausgeführt) durch einen internen Serverfehler ersetzt wurde, da WSGI gestoppt wurde, als der Syntaxfehler auftrat.

Also habe ich den Syntaxfehler behoben, überprüft, ob ich nicht mehr mit hatte manage.py check, und berührt, wsgi.pyum erneut bereitzustellen. Auf meiner Website wird jedoch weiterhin ein interner Serverfehler angezeigt! Wenn ich die Apache-Protokolle überprüfe, sehe ich Folgendes:

[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

Die erste Reihe von Fehlern zeigt, dass WSGI aufgrund des Syntaxfehlers in my fehlschlägt admin.py. Die zweite Reihe von Fehlern scheint jedoch einen internen Fehler von Django zu zeigen:

RuntimeError: populate() isn't reentrant

geworfen von der populateMethode von registry.py.

Das Googeln dieser Fehlermeldung gibt überraschend wenig Informationen zurück, keine davon aus der Django-Dokumentation. Anscheinend kann es manchmal vorkommen, dass Sie eine App zweimal in Ihrer App benennen settings.py, aber das mache ich nicht. Noch wichtiger ist, dass ich mich settings.pyseit dem Zeitpunkt, an dem die Website einwandfrei funktioniert hat, nicht geändert habe - das einzige, was ich geändert habe, war admin.py.

Ich habe versucht, alle von mir vorgenommenen Änderungen zurückzusetzen, sodass mein gesamter Python-Code wieder in dem Zustand ist, in dem die Website funktioniert hat - und ich erhalte immer noch die populate() isn't reentrantFehlermeldung, wenn ich versuche, WSGI dazu zu bringen, den Code neu zu laden!

Ich habe auch versucht, verschiedene Apps im Abschnitt INSTALLED_APPS von zu kommentieren settings.py, und selbst wenn nur 'django.contrib.staticfiles' aktiviert ist, tritt der Fehler immer noch auf. Seltsamerweise wird der Fehler auch dann noch angezeigt, wenn ich alle Apps auskommentiere - Django gibt den Fehler aus, auch wenn keine Apps geladen werden!

Weiß jemand, was hier los ist? Oder eine bessere Möglichkeit für mich, diesen Fehler zu debuggen, da der Traceback im Apache-Protokoll nicht hilfreich ist?

Anmerkungen: Ich verwende Django 1.7, Apache 2.2 und Python 2.7.

Edward
quelle
2
Ich würde versuchen, alle möglicherweise vorhandenen .pyc-Dateien zu entfernen.
Dukebody
Nein, das Entfernen aller .pyc-Dateien hat nicht geholfen. Das Berühren wsgi.pyführt zu demselben Apache-Fehler, und die .pyc-Dateien werden nicht neu erstellt.
Edward
1
Haben Sie versucht, Apache neu zu starten?
Dukebody
Ich kann Apache nicht neu starten, da ich auf diesem Server keine Rechte dazu habe. Der Administrator mit Root-Zugriff ist erst am Montag wieder im Büro.
Edward
In meinem Fall wurde die App von INSTALLED_APPS nicht in der Umgebung installiert.
Maciek

Antworten:

97

Dies wird durch einen Fehler in Ihren Django-Einstellungen verursacht. Leider versteckt Django den Fehler hinter dieser generischen und nicht nützlichen Fehlermeldung.

Um das wahre Problem aufzudecken, öffnen Sie django/apps/registry.pyund um Zeile 80 herum, ersetzen Sie:

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

mit:

self.app_configs = {}

Dadurch kann Django weiter laden und den tatsächlichen Fehler anzeigen.

Ich habe diesen Fehler aus verschiedenen Gründen festgestellt. Einmal war, weil ich einen schlechten Import in einer der admin.py meiner App hatte.

Cerin
quelle
22
Dies ist bei weitem die nützlichste Antwort in diesem Thread. Jetzt weiß ich ->django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
RickyA
2
Hat mein Leben gerettet. Mit dieser Lösung konnte ich die fehlenden Anforderungen und Kompatibilitätsfehler zwischen ihnen erfolgreich überprüfen.
Ángel Jiménez
1
Das war perfekt. Wenn ich diese eine Zeile ändere, sehe ich, dass ich einen einfachen Importfehler hatte. Ich konnte nicht sagen, was vorher los war.
James
4
Diese Antwort ist reines Gold.
Xpanta
2
@ RickyA und dies war bei weitem der nützlichste Kommentar, da ich mich nicht einmal mit dieser Antwort beschäftigen musste und es einfach versuchte pip install --upgrade psycopg2und das reparierte es.
Benutzer
65

Der Administrator meines Servers hat Apache neu gestartet, und das hat dieses Problem auf magische Weise behoben. Die exakt gleichen Python-Dateien wurden ohne Ursache geladen populate() isn't reentrant. Ich habe sogar versucht, eine andere Datei mit einem Syntaxfehler zu laden und dann zu beheben, und der Server konnte die neue Datei laden und ohne Probleme korrekt ausführen.

Ich weiß immer noch nicht, was falsch gelaufen ist, aber ich markiere dies als beantwortet, da das Problem behoben ist. (Nun, ich werde es als beantwortet markieren, sobald StackOverflow es mir ermöglicht, meine eigene Antwort zu akzeptieren.)

Update : Nachdem ich diesen Fehler weiterhin erhalten habe, als ich versehentlich Python mit Syntaxfehlern hochgeladen habe, habe ich eine Problemumgehung gefunden, die einfacher ist als ein Neustart von Apache. Wenn WSGI den populate() isn't reentrantFehler auslöst , ersetze ich meine Django-Projekte wsgi.pydurch diese einfache Funktion:

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

Dann lade ich meine Website neu und der WSGI-Daemon-Prozess wird neu gestartet (was ich anhand des Apache-Protokolls erkennen kann, obwohl auf der Website immer noch derselbe 500-Fehler angezeigt wird).

Wenn ich dann wsgi.pywieder zum Normalzustand wechsle und erneut lade, nimmt WSGI meinen Code erfolgreich auf, ohne ihn zu werfen populate() isn't reentrant(vorausgesetzt, ich habe diesmal keine Syntaxfehler). Apache muss also nicht neu gestartet werden, sondern nur der WSGI-Prozess, und das kann ich ohne Root-Rechte tun.

Edward
quelle
8
Für mich bestand das Problem nicht darin, Änderungen, die ich an einem Modell in einer meiner Apps vorgenommen hatte, zu migrieren.
user2662692
Ok, ich habe fast das gleiche Problem und ja, es wird behoben, wenn der Computer neu gestartet und der Server neu gestartet wird. Aber das Problem wiederholt sich immer wieder. Manchmal plötzlich. innerhalb eines Monats ist es dreimal aufgetreten. Wenn jemand eine Idee hat, helfen Sie bitte.
Rohit
@Rohit, wenn Sie Hilfe in Ihrer Situation benötigen, sollten Sie wahrscheinlich eine neue Frage stellen, die diese beschreibt. Es ist unwahrscheinlich, dass Sie in den Kommentaren hier eine Antwort erhalten.
Edward
4
startup-timeoutIn neueren Versionen von mod_wsgi gibt es eine Option für den Daemon-Modus von mod_wsgi, mit deren Hilfe vorübergehende Fehler behoben werden können, wenn Django initialisiert wird, z. B. wenn eine Datenbank nicht verfügbar ist. Das Zeitlimit führt dazu, dass der Prozess automatisch neu gestartet wird, wenn die WSGI-Anwendung nach dem Zeitlimit nicht ordnungsgemäß geladen wird. Auch das hilft nicht weiter, wenn Sie ein permanentes Problem mit Ihrem eigenen Code haben. Suchen Sie in diesem Fall nach dem allerersten Fehler, nicht nach dem populate()Fehler, da er den wahren Grund für den Fehler Ihres Codes angibt.
Graham Dumpleton
1
Was meinst du mit "wsgi.py des Django-Projekts mit dieser einfachen Funktion"? Wie ersetze ich eine Datei durch eine Funktion?
Cerin
46

Ich weiß, dass dies eine alte Antwort ist, aber ich werde mit meiner Lösung dazu beitragen:

Um die Ursache des Problems zu diagnostizieren, führen Sie den Vorgang aus manage.py checkund prüfen Sie, ob Sie dort etwas finden

In meinem Fall war eine veraltete Anforderung das Problem und Django konnte kein Submodul importieren

Stellen Sie sicher, dass Ihre Anforderungen aktuell sind

Jesus Gomez
quelle
2
Ich erhalte Fehler 500 bei Apache und kann das Problem nicht finden. Durch diesen Befehl habe manage.py checkich das Problem gefunden. Danke dir.
Ali Hesari
13

Es ist keine Antwort, sondern eine Reflexion.

Wenn Sie ein Upgrade auf Django 1.7 durchführen und einen Fehler von 500 haben und Ihre Seite neu laden, sagt Apache "populate () ist nicht wiedereintrittsfähig". Ich denke, wenn Sie Ihre Seite laden, lädt Apache alle Module, die Sie für Ihre App benötigen, und wenn der Fehler behoben ist, wird das Modul nicht entladen. Wenn Sie Ihre Seite neu laden, lädt Apache diese Module erneut, aber sie sind bereits geladen. Apache sagt also "populate () ist nicht wiedereintrittsfähig".

Ich habe zwei Aktionen, um dies zu korrigieren: Starten Sie Apache neu oder korrigieren Sie den Fehler, der den ersten 5OO-Fehler behandelt.

Versuchen Sie, Apache neu zu starten mit:

sudo service httpd restart

Ich hoffe es hilft dir.

Vianney Thurotte
quelle
10

Wenn Sie diesen Fehler bei der Verwendung von Google App Engine erhalten, überprüfen Sie Ihre Protokolle auf andere Fehler, die dies verursachen könnten. Ich bekam:

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

Sie können SQLite nicht mit Google App Engine verwenden. Kommentieren Sie daher den DATABASESAbschnitt zum settings.pyBeenden dieses Fehlers und den RuntimeError("populate() isn't reentrant")Fehler aus.

donturner
quelle
Dies erklärt, warum lokal alles einwandfrei funktioniert hat, bei der Bereitstellung in GAE jedoch 500 Fehler aufgetreten sind. Ein kleiner Hinweis: Die Suche nach Text "Raise" auf der GAE-Protokollseite erzeugte genau einen Treffer, der zu der Fehlermeldung führte, auf die Donturner hinwies. Seine Lösung hat mir den Tag gerettet :-)
Golden Thumb
4

Möglicherweise können Sie das Problem beheben, ohne Apache neu zu starten, indem Sie eine Datei (außer wsgi.py) berühren, die sich zu Beginn des Ladevorgangs befindet. Zum Beispiel Ihre Einstellungsdatei:

$ touch settings.py

Ich habe das auch nicht richtig gelöst, aber mehr Infos in meiner Frage hier: Code-Änderungsüberwachung funktioniert nicht mit Django 1.7 auf mod-wsgi

seddonym
quelle
2

Ich hatte gerade das gleiche Problem und begann mich umzusehen.

Jetzt habe ich es zum Laufen gebracht, also dachte ich, ich sollte es mit euch teilen!

Alles , was ich tat , war zu tun chown user:group /to/path -Rund chmod 770 /to/path -Ralle immer wieder und es funktionierte.

Behzad
quelle
2

Dies sieht aus wie eine schöne Sammlung gültiger Antworten für denselben Apache mod-wsgi-Fehler, wobei jeder Typ diejenige veröffentlicht, die für ihn / sie funktioniert. Hier ist meine:

Vergessen Sie nicht, Ihre Projektanforderungen nach der Bereitstellung zu aktualisieren :)

José L. Patiño
quelle
2

Ich hatte das gleiche Problem und die Fehlerquelle war für mich nur ein Syntaxfehler in einer Datei, mit der ich gearbeitet habe. Nach dem Beheben des Tippfehlers populate() is not reentrantverschwand der Fehler.

Wenn Sie Django über ein WSGI-Skript ausführen, können Sie den Tippfehler möglicherweise identifizieren, indem Sie das WSGI-Skript einfach über die Befehlszeile ausführen. Beispielsweise:

cd /usr/local/www/wsgi-scripts/
python djangolauncher.wsgi
Peter
quelle
2

Dieser Fehler wird auch bei inkonsistenter Verwendung von Leerzeichen und Tabulatoren im Code generiert.

Webbyfox
quelle
1

Setup: Ubuntu 14.04, Django 1.10, Python 3.5 (in virtualenv).

Ich habe viele dieser Lösungen ohne Glück ausprobiert, aber dann habe ich festgestellt, dass das Apache-Fehlerprotokoll in meinem Fall zwei verschiedene Fehler enthält. Eine, die passiert, wenn jemand versucht, eine Seite zu besuchen, eine andere, die beim Start passiert. Ich habe den Start verpasst, weil ich normalerweise ein paar Mal versucht habe, die Seite zu aktualisieren, und daher den Fehler beim Besuch nur einige Male wiederholt sah.

Ich habe dann stattdessen nach Lösungen für den Startfehler gesucht und die Lösung für diese Frage hat bei mir funktioniert . Kurz gesagt, es geht darum, das mod_wsgiPaket auf Umwegen zu aktualisieren .

Ich hatte monatelang Warnungen über die Nichtübereinstimmung in mod_wsgiVersionen erhalten, aber plötzlich führte dies zu Apache-Fehlern 500. Macht für mich keinen Sinn.

Ich vermute, dass dieser RuntimeError: populate() isn't reentrantFehler normalerweise ein Zeichen dafür ist, dass man nach einem Startfehler suchen sollte, der auf das eigentliche Problem hinweist.

bei Besuch

[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

Anfang

[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'
CoderGuy123
quelle
Erstellen Sie eine neue Frage. Stellen Sie keine Fragen als Antworten.
Graham Dumpleton
1
Ich stelle keine Frage. Veröffentlichung einer Lösung für das gleiche Problem, das bei mir funktioniert hat. Apache löst den Fehler 500 aus und der Fehler in der Protokolldatei ist der gleiche wie in der hier gestellten Frage. Bitte lesen Sie meine Antwort noch einmal. :)
CoderGuy123
Nehmen Sie dann die eigentliche Lösung in Ihre Antwort auf, anstatt auf eine andere Frage zu verweisen. Das Problem ist jedoch, dass dieser andere Beitrag das Problem überhaupt nicht erwähnt populate()und für mich wie ein völlig anderes Problem aussieht, sodass ich nicht sehen kann, wie Sie denken, dass es das gleiche Problem gelöst hat. Soweit irgendjemand es beurteilen kann, hatten Sie ein anderes Problem, für das Sie zu Beginn eine separate Frage hätten stellen sollen, anstatt die Antworten hier für ein anderes Problem zu verwechseln, das auf Details in diesem anderen Beitrag basiert.
Graham Dumpleton
Es ist nicht notwendig, die Schritte hier zu wiederholen. Die Fehler erscheinen im selben Protokoll, nur dass das OP hier nicht alles enthielt. Ein Fehler wird angezeigt, wenn auf die Seite zugegriffen wird (das ist der Teil in OP hier), ein anderer, wenn Apache gestartet wird (das ist der Teil im anderen Thread).
CoderGuy123
1

Ich weiß, dass es eine Weile her ist, seit diese Frage gestellt wurde, aber ich bin gerade auf dieses Problem gestoßen, weil ich ein Problem gesehen habe, das ich hier nicht besprochen habe. Ich habe den RuntimeError: populate() isn't reentrantFehler aufgrund von SELinux unter CentOS 7 erhalten. Ich hatte Django aus einem Home-Verzeichnis heraus bereitgestellt und musste einfach den SELinux-Booleschen Wert aktivieren, der das Lesen von Home-Verzeichnissen ermöglichte, da der populate () -Fehler auf ein Berechtigungsproblem zurückzuführen war. Die Lösung für mich war setsebool -P httpd_read_user_content 1. Ich hoffe, das hilft jemandem, der dieses Problem hat.

Ad Astra
quelle
Wir hatten das gleiche Problem mit CentOS 7 und SELinux. Wir setzten sie unter Verwendung chconder Kontext des Problems zu ändern , .soum Datei httpd_sys_script_exec_t .
Jon
1

Die Vielzahl der Antworten macht es deutlich; Dies ist ein allgemeiner Fehler, der mehrere Grundursachen haben kann, die normalerweise mit dem Laden von Apache / WSGI zusammenhängen.

Alle diese Antworten auf dieser Seite sollten als eine Art Checkliste fungieren. In diesem Sinne möchte ich die Hauptursache für meine Instanz dieses Fehlers hinzufügen: Fehler beim Hinzufügen eines 'Import-Betriebssystems' zu Ihrer settings.py-Datei.

Insbesondere hatten wir einen Entwickler in unserem Team, der beabsichtigte, ein nicht benötigtes Paket zu entfernen, und stattdessen "import os" aus dem oberen Bereich der Datei "settings settings.py" entfernte. Nach einem Neustart von Apache wurde unsere Anwendung nicht neu gestartet und wir erhielten den gefürchteten Fehler "RuntimeError: populate () ist nicht wiedereintrittsfähig".

Eine schnelle Überprüfung von "python manage.py" ergab kein Problem, eine "python settings.py" jedoch. Das Betriebssystempaket wurde nicht geladen.

Wenn Sie diesen Fehler haben, konzentrieren Sie Ihre Suche auf die Überprüfung Ihrer settings.py-Datei (en) und auch Ihrer WSGI-Datei.

Tom Halpin
quelle
3
Stellen Sie vor allem sicher, dass Sie zum Fehlerprotokoll zurückkehren und nach der allerersten Fehlermeldung suchen, die nach einem Neustart eines der Apache- oder mod_wsgi-Daemon-Prozesse auftritt. Dieser erste Fehler gibt Ihnen den wahren Grund für den Fehler an. Alle nachfolgenden Anforderungen für denselben Prozess erwähnen nur den reentrantFehler. Stellen Sie im Dämonmodus auch sicher, dass Sie die startup-timeoutOption verwenden, wenn Sie dieses Problem aufgrund vorübergehender Fehler haben, anstatt Fehler zu codieren. Zumindest auf diese Weise kann es automatisch wiederhergestellt werden.
Graham Dumpleton
Dies ist die richtige Antwort. Der Fehler ist allgemein. Überprüfen Sie die Meldung kurz vor dem Laufzeitfehler.
Popieluch
1

RuntimeError: populate() isn't reentrant

Kann alles sein, deshalb gibt es so viele verschiedene Antworten auf diese Frage.

Der Trick besteht darin, die Fehlermeldung kurz vor dem zu lesen RuntimeError. In Ihrem Fall scheint ein Syntaxfehler in der Datei /extra/www/htmlquotes/quotes_django/quotespage/admin.py in Zeile 15 zu liegen, siehe:

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
Popieluch
quelle
1

Hinweis zu AWS Elastic Beanstalk: Die settings.pyvon Django-admin geschriebene Standardeinstellung enthält einen Verweis auf eine lokale SQLite-Datenbank als Datenquelle. Dies funktioniert wahrscheinlich auf Ihrem lokalen Betriebssystem, jedoch nicht auf AWS EB, und gibt den populate() isn't reentrantLaufzeitfehler aus. Um dies zu testen, kommentieren Sie einfach die DATABASES={<...>}Anweisung aus settings.py, stellen Sie die Anwendung bereit und öffnen Sie sie erneut.

Anfänger AWS EB Benutzer
quelle
Dies tritt beispielsweise auf, wenn Sie mit Django Version 2.2 (oder höher) mit der Standard-SQLite-Datenbank auf AWS EB bereitstellen. Sie werden django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).von der gefolgt RuntimeError: populate() isn't reentrant. Aus den AWS-Dokumenten : "Django 2.2 ist nicht mit der Elastic Beanstalk Python 3.6-Plattform kompatibel." (zum Zeitpunkt des Schreibens)
djvg
0

Ich hatte dieses Problem und konnte keine Antwort finden, warum, bis ich meine Commits zurückverfolgte. Anscheinend hatte ich wegen der automatischen Vervollständigung einen versehentlichen Import hinzugefügt, der das Setup vermasselte.

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

Im Apache-Fehlerprotokoll: RuntimeError ("populate () ist nicht wiedereintrittsfähig")

Es funktionierte gut in meiner Windows-Entwicklungsumgebung, schlug jedoch auf dem Ubuntu / Apache-Server fehl.

Jan.
quelle
0

Ich habe denselben Fehler festgestellt, nachdem ich die Reihenfolge dieser Einstellung geändert hatte:

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',
)

Das Problem wurde behoben, indem es hier zuvor wieder in die Bestellung aufgenommen und Apache neu gestartet wurde.

Romain Jouin
quelle
0

In meinem Fall hatte ich eine custom renderer classfor Django Rest Framework, aus irgendeinem Grund musste ich die Methode "get_context" der Renderer-Klasse überschreiben (vollständige Offenlegung: damit django toolbardie korrekte Anzahl der SQL-Abfragen angegeben wird)

Ich habe diese Klasse entfernt und erneut bereitgestellt. Es funktionierte.

Karan Kumar
quelle
0

In meinem Fall ist der Fehler aufgetreten, weil ein erforderliches Pip-Paket fehlte.

Also habe ich einen pip install -r requirements.txtApache neu gestartet und die Dinge haben wieder funktioniert.

flix
quelle
0

Durch Entfernen des Verzeichnisses virtualenv, Neuerstellen des Verzeichnisses virtualenv und erneutes Installieren aller Anforderungen wurde es für mich behoben.

Farid El Nasire
quelle
0

Hinzufügen meines Grundes zur Liste. Für mich lag es daran, dass ich einen Django-Dienst mit demselben Verzeichnis wie ein Prozessverzeichnis hatte. Das Umbenennen des Prozesses / Verzeichnisses hat das Problem behoben.

Kennzeichen
quelle
0

Ich hatte eine rekursive django.setup(), z. B. habe ich versucht, eine django.setup()in eine zu schreiben app/models.py, in der Stapelspur versuchte Django, dies in der Nähe von:

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

Also ja, versuchen Sie nicht, Django einzurichten, während Django eingerichtet wird ...

ThorSummoner
quelle
0

Ein Neustart des Apache-Servers für mich löste das Problem. Sie können dies mit dem Befehl $ sudo service apache2 restart tun

Shivam Kohli
quelle
0

Ich hatte das gleiche Problem. Was für mich funktionierte, war das Auskommentieren der Standarddatenbankeinstellungen in / settings.py. Ich habe auch gelesen, dass spätere Versionen von Django nicht mit ebs kompatibel sind

Steve Bien-Aime
quelle
0

Für mich war der Fehler ein fehlendes mysqlclientPaket in der Datei require.txt.

Zuerst habe ich das mysqlclientPaket installiert mit:

pip install mysqlclient

dann habe ich die Datei require.txt aktualisiert mit:

pip freeze > requirements.txt

und das löste mein Problem.

Abdulwahab Alhendi
quelle
-1

In meinem Fall hatte ich einen zirkulären Import, der einen Fehler verursachte, der die Auffüllmethode unterbrach.

Luis Carlos Mejia
quelle
-1

Meine 2 Cent einwerfen:

Ich habe ein funktionierendes Setup in Docker neu erstellt. Das neue Docker-Setup ist mit fehlgeschlagen

populate isn't reentrant

Das scheint ein generischer Fehler zu sein. In meinem Fall habe ich das übersehen

pip install Django

Installiert die neueste Version ( 2.0) anstelle der erforderlichen Version 1.11. Ändern Sie dies in

pip install Django==1.11

mein Problem behoben.

Olaf Dietsche
quelle
-1

Ich denke, dies ist ein allgemeiner Fehler, wenn etwas nicht stimmt settings.py. Manchmal kann ich das Problem durch Ausprobieren finden, indem ich die installierten Apps einzeln entferne. In einigen Fällen hängt es nicht mit den installierten Apps zusammen. Aber meiner Erfahrung nach ist es in jedem Fall ein Problem innerhalb der settings.pyDatei.

Noel Puru
quelle
-1

Überprüfen Sie, ob Sie Ihre API-Namen im Abschnitt "Installierte App" von settings.py zweimal erwähnt haben.

Anwendungsdefinition

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

Anwendungsdefinition

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

Das Entfernen doppelter Einträge löste mein Problem

Swati Srivastava
quelle
Aber das Tutorial sagt INSTALLED_APPS = ['allauth', 'allauth.account', 'allauth.socialaccount',]
ming
@ming Es ist optional.
Swati Srivastava