it-swarm.com.de

Django bevölkern () ist nicht wiedereintrittsfähig

Ich bekomme dies immer wieder, wenn ich versuche, meine Django-Anwendung in der Produktion zu laden. Ich habe alle Stackoverflow-Antworten ausprobiert, aber nichts wurde behoben. Irgendwelche anderen Ideen. (Ich benutze Django 1.5.2 und 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
27
ip.

Am Ende bestand das Problem darin, dass ich versuchte, eine zweite Django-App auszuführen, und Folgendes nicht in meiner Apache-Konfiguration definiert war:

WSGIDaemonProcess ...
WSGIProcessGroup ...

Ich habe gerade erfahren, dass Sie eine einzelne Django-App ausführen können, ohne sie zu definieren, aber wenn die beiden Apps einen Konflikt verursachen.

5
ip.

Dieser RuntimeError trat erstmals nach einem Upgrade auf Django 1.7 auf (und ist immer noch mit Django 1.8 vorhanden). Es wird normalerweise durch eine Django-Anwendung verursacht, die einen Fehler auslöst, der jedoch irgendwie verschluckt wird.

Hier ist eine Problemumgehung, die für mich funktioniert. Fügen Sie es Ihrer Datei wsgi.py hinzu und der Fehler real sollte protokolliert werden:

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)

In diesem Thread auf Modwsgi finden Sie weitere Details.

29
Dirk Eschler

Ursachen für den populate() isn't reentrant-Fehler können viele Ursachen haben. Wenn Sie sich den registry.py in Ihrer Django-Anwendung ansehen, liegt dies wahrscheinlich in diesem Verzeichnis
/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")

Wie Sie in dem Kommentar sehen, heißt es, app_config sollte makellos sein. Das bedeutet, wenn eine Konfiguration nicht korrekt ist oder die erforderliche Bibliothek fehlt, wird dieser Popup-Fehler angezeigt. Ich habe diesen Fehler erhalten, weil ich die Installation von SQLite vermisst habe. Wie Sie sehen, werden in der Ausnahme keine möglichen Ursachen genannt. Ich habe sqlite mit diesem Befehl auf Debian installiert 

pip install pysqlite

Es hat mein Problem gelöst. Meine Ausnahme wegen des Fehlens von pysqlite. Möglicherweise fehlen ein anderes erforderliches Paket oder Fehler in Ihrem settings.py

3
Harun ERGUL

Vollständige Offenlegung - "populate () ist kein wiedereintrittsfähiger Fehler" kann mehrere Ursachen haben, und die Überprüfung der letzten Konfigurations- oder Programmänderungen ist eine sehr gute Idee.

Dieser Fehler kann jedoch auch auftreten, wenn Apache aktualisiert wird und ein Modul nicht mehr gültig ist/beschädigt ist/aktualisiert werden muss. Dies ist uns bei Webfaction nach einem Apache-Update aufgetreten (kann jedoch auf einem beliebigen Host auftreten).

Die Verwendung des Apache-Neustart-Skripts hilft NICHT, da die Module beim Neustart geladen bleiben. Abhängig von Ihrem System und ob die Mods auch beim Herunterfahren von Apache zwischengespeichert werden, kann dies hilfreich sein.

Stoppen Sie Apache vollständig. Auf Webfaction heißt das:

~/webapps/<YOUR WEB APP>/Apache2/bin/stop

Warten Sie ein paar Sekunden und dann ...

~/webapps/<YOUR WEB APP>/Apache2/bin/start

Das sollte das Problem korrigieren. Wenn Ihr System die Mods zwischenspeichert, müssen Sie den Cache vor dem Start möglicherweise leeren.

Hoffe das hilft!

Hier ist der Link, den sie mir gegeben haben (ich weiß, dass der Fehler anders ist, aber wir hatten dies aus dem gleichen Grund auch mit dem Populate-Fehler):

https://statusblog.webfaction.com/2018/05/16/regarding-glibc_private-errors-in-your-python-application/

1
MontyThreeCard

Für Benutzer, die AWS Lambda verwenden (und optional zappa verwenden), kann dies passieren, wenn die Größe des Codes und der Abhängigkeiten, die in ein Bereitstellungspaket gepackt werden, nach der Dekomprimierung 250 MB übersteigt.

In der Regel ist die Zip-Datei möglicherweise nur 50 MB groß, kann jedoch auf über 250 MB dekomprimiert werden. Möglicherweise müssen Sie das Implementierungspaket manuell entpacken, um zu überprüfen, dass es nicht zu groß ist, wenn es nicht komprimiert ist.

https://docs.aws.Amazon.com/lambda/latest/dg/limits.html

0
python1981

Für mich wurde dieser Fehler verursacht, weil ich meinen INSTALLED_APPS nicht korrekt für lokal und für die Produktion aufgeteilt hatte. Das bedeutet, dass ich Django-cors-headers verwendet habe und in der Produktion nicht. Aber ich hatte versehentlich Django-cors-headers verlassen, obwohl ich es aus meiner Produktion requirements.txt entfernte. Nach dem Löschen von cors-headers aus den in der Produktion installierten Apps wurde der Fehler behoben.

0
J. Hesters