Django arrête de fonctionner avec RuntimeError: populate () n'est pas réentrant


124

J'ai développé une application web Django déployée sur un serveur Apache avec WSGI, et tout s'est bien passé. Aujourd'hui, j'ai apporté quelques modifications mineures à mon application pour admin.pytenter de personnaliser l'interface d'administration Django intégrée, et j'ai initialement fait une erreur de syntaxe (une parenthèse non fermée). Cela signifiait que lorsque j'ai touché wsgi.pyet chargé le code (WSGI s'exécutant en mode démon sur mon hôte virtuel), mon site Web était remplacé par une erreur de serveur interne car WSGI s'arrêtait lorsqu'il rencontrait l'erreur de syntaxe.

J'ai donc corrigé l'erreur de syntaxe, vérifié que je n'avais plus avec manage.py check, et touché wsgi.pyà redéployer. Mais mon site Web affiche toujours une erreur de serveur interne! En vérifiant les journaux Apache, voici ce que je vois:

[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

La première série d'erreurs montre l'échec de WSGI en raison de l'erreur de syntaxe dans my admin.py. Cependant, la deuxième série d'erreurs semble montrer une erreur interne à Django:

RuntimeError: populate() isn't reentrant

jeté de la populateméthode de registry.py.

Googler ce message d'erreur renvoie étonnamment peu d'informations, aucune de celles-ci provenant de la documentation de Django. Apparemment, cela peut parfois arriver si vous nommez une application deux fois dans votre settings.py, mais je ne le fais pas. Plus important encore, je n'ai pas changé settings.pydepuis le moment où le site Web fonctionnait bien - la seule chose que j'ai changée était admin.py.

J'ai essayé d'annuler toutes les modifications que j'ai apportées, donc tout mon code Python est de retour dans l'état où il était lorsque le site Web fonctionnait - et j'obtiens toujours l' populate() isn't reentranterreur lorsque j'essaye de faire recharger le code par WSGI!

J'ai également essayé de commenter différentes applications dans la section INSTALLED_APPS de settings.py, et même avec uniquement «django.contrib.staticfiles» activé, l'erreur se produit toujours. Bizarrement, j'obtiens toujours l'erreur même si je commente toutes les applications - Django lève l'erreur même s'il ne charge aucune application!

Quelqu'un sait-il ce qui se passe ici? Ou un meilleur moyen pour moi de déboguer cette erreur, car le traçage dans le journal Apache est plutôt inutile?

Notes: J'utilise Django 1.7, Apache 2.2 et Python 2.7.


2
J'essaierais de supprimer tous les fichiers .pyc qui pourraient se trouver.
dukebody

Non, la suppression de tous les fichiers .pyc n'a pas aidé. Toucher wsgi.pyentraîne la même erreur Apache et les fichiers .pyc ne sont pas recréés.
Edward

1
Avez-vous essayé de redémarrer Apache?
dukebody

Je ne peux pas redémarrer Apache car je n'ai pas les droits sur ce serveur. L'administrateur disposant d'un accès root ne sera de retour au bureau que lundi.
Edward

Dans mon cas, l'application n'a pas été installée à partir de INSTALLED_APPS dans l'environnement.
maciek

Réponses:


100

Cela est dû à un bogue dans vos paramètres Django quelque part. Malheureusement, Django cache le bogue derrière ce message d'erreur générique et inutile.

Pour révéler le vrai problème, ouvrez django/apps/registry.pyet autour de la ligne 80, remplacez:

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

avec:

self.app_configs = {}

Cela permettra à Django de continuer le chargement et de révéler l'erreur réelle.

J'ai rencontré cette erreur pour plusieurs causes différentes. Une fois, c'était parce que j'avais une mauvaise importation dans l'un des admin.py de mon application.


22
C'est de loin la réponse la plus utile dans ce fil. Maintenant je sais ->django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
RickyA

2
Sauvé ma vie. Cette solution m'a permis de vérifier avec succès les exigences manquantes et les erreurs de compatibilité entre elles.
Ángel Jiménez

1
C'était parfait. Changer cette ligne m'a permis de voir que j'avais une simple erreur d'importation. Je ne pouvais pas dire ce qui se passait avant cela.
James

4
Cette réponse est de l'or pur.
xpanta

2
@RickyA et c'était de loin le commentaire le plus utile car je n'ai même pas eu à me soucier de cette réponse et j'ai juste essayé pip install --upgrade psycopg2et cela a résolu le problème .
Utilisateur le

65

L'administrateur de mon serveur a redémarré Apache et cela a résolu ce problème par magie. Les mêmes fichiers Python chargés sans causer populate() isn't reentrant. J'ai même essayé de charger un autre fichier avec une erreur de syntaxe, puis de le réparer, et le serveur a pu charger le nouveau fichier et fonctionner correctement sans problème.

Je ne sais toujours pas ce qui n'allait pas, mais je marque cela comme une réponse puisque le problème a disparu. (Eh bien, je le marquerai comme étant répondu dès que StackOverflow me permettra d'accepter ma propre réponse.)

Mise à jour : après avoir continué à obtenir cette erreur lorsque je télécharge accidentellement Python avec des erreurs de syntaxe, j'ai trouvé une solution de contournement plus facile que de redémarrer Apache. Lorsque WSGI commence à lancer l' populate() isn't reentranterreur, je remplace mon projet Django wsgi.pypar cette fonction simple:

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

Ensuite, je recharge mon site Web et le processus du démon WSGI redémarre (ce que je peux dire en regardant le journal Apache, même si le site Web affiche toujours la même erreur 500).

Si je wsgi.pyreviens ensuite à la normale et que je recharge à nouveau, WSGI récupère avec succès mon code sans lancer populate() isn't reentrant(en supposant que je n'ai aucune erreur de syntaxe cette fois). Donc, l'intégralité d'Apache n'a pas besoin de redémarrer, juste le processus WSGI, et je peux le faire sans privilèges root.


8
Pour moi, le problème n'était pas de migrer les modifications que j'avais apportées à un modèle dans l'une de mes applications.
user2662692

Ok, je suis confronté à presque le même problème et oui, il est corrigé lors du redémarrage de la machine et du redémarrage du serveur. Mais le problème ne cesse de se répéter. Parfois tout d'un coup. en un mois, il s'est produit trois fois. Si quelqu'un a une idée, veuillez aider.
Rohit

@Rohit, si vous voulez de l'aide avec votre situation, vous devriez probablement poster une nouvelle question la décrivant. Il est peu probable que vous obteniez une réponse dans les commentaires ici.
Edward le

4
Il existe une startup-timeoutoption pour le mode démon de mod_wsgi dans les versions plus récentes de mod_wsgi qui aide à récupérer des erreurs transitoires lorsque Django est en cours d'initialisation, comme une base de données non disponible. Le délai d'expiration entraînera le redémarrage automatique du processus si l'application WSGI ne se charge pas correctement après le délai d'expiration. Même cela n'aidera pas lorsque vous avez un problème permanent avec votre propre code. Dans ce cas, recherchez la toute première erreur, pas l' populate()erreur car elle donnera la vraie raison pour laquelle votre code échoue.
Graham Dumpleton

1
Que voulez-vous dire "wsgi.py du projet Django avec cette fonction simple"? Comment remplacer un fichier par une fonction?
Cerin

46

Je sais que c'est une vieille réponse mais je vais contribuer avec ma solution:

Pour diagnostiquer la source du problème, exécutez manage.py checket voyez si vous y trouvez quelque chose

Dans mon cas, une exigence obsolète était le problème et django ne parvenait pas à importer un sous-module

Assurez-vous que vos exigences sont à jour


2
J'obtiens l'erreur 500 sur Apache et je ne trouve pas le problème. Par cette commande, manage.py checkj'ai trouvé le problème. Je vous remercie.
Ali Hesari

13

Ce n'est pas une réponse mais une réflexion.

Lorsque vous mettez à niveau vers django 1.7 et que vous avez une erreur 500 et que vous rechargez votre page, Apache dit "populate () n'est pas réentrant". Je pense que c'est lorsque vous chargez votre page, Apache charge tous les modules dont vous avez besoin pour votre application et lorsque l'erreur est gérée, il ne décharge pas le module. Ainsi, lorsque vous rechargez votre page, apache charge à nouveau ces modules mais il est déjà chargé. Donc, apache dit que "populate () n'est pas réentrant".

J'ai deux actions pour corriger cela: Redémarrez apache ou corrigez l'erreur qui gère la première erreur 5OO.

Essayez de redémarrer Apache avec:

sudo service httpd restart

J'espère que cela vous aidera.


10

Si vous obtenez cette erreur lors de l'utilisation de Google App Engine, recherchez dans vos journaux d'autres erreurs qui pourraient en être la cause. Je recevais:

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

Vous ne pouvez pas utiliser SQLite avec Google App Engine, alors commentez la DATABASESsection de l' settings.pyarrêt de cette erreur et de l' RuntimeError("populate() isn't reentrant")erreur également.


Cela explique pourquoi tout fonctionnait bien localement mais obtenait une erreur 500 lors du déploiement sur GAE. Un petit conseil: la recherche du texte "lever" sur la page du journal GAE a généré exactement un résultat qui a conduit au message d'erreur signalé par donturner. Sa solution m'a sauvé la journée :-)
Golden Thumb



2

J'ai juste rencontré le même problème alors j'ai commencé à regarder autour de moi.

Maintenant je l'ai fait fonctionner, alors j'ai pensé que je devrais le partager avec vous les gars!

Je ne ai fait faire chown user:group /to/path -Ret chmod 770 /to/path -Rtout recommencer et cela a fonctionné.


2

Cela ressemble à une belle collection de réponses valides pour la même erreur Apache mod-wsgi, chaque gars publiant celle qui fonctionne pour lui / elle, alors voici la mienne:

N'oubliez pas de mettre à jour les exigences de votre projet après le déploiement :)


2

J'ai rencontré le même problème et la source de l'erreur pour moi était simplement une erreur de syntaxe dans un fichier avec lequel je travaillais. Après avoir corrigé la faute de frappe, l' populate() is not reentranterreur a disparu.

Si vous exécutez django à partir d'un script wsgi, vous pourrez peut-être identifier la faute de frappe en exécutant simplement le script wsgi à partir de la ligne de commande. Par exemple:

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

2

Cette erreur a également généré si l'utilisation incohérente de l'espace et de la tabulation dans le code.


1

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

J'ai essayé plusieurs de ces solutions sans chance, mais j'ai remarqué que le journal des erreurs Apache contient deux erreurs différentes dans mon cas. Un qui se produit lorsque quelqu'un essaie de visiter une page, un autre qui se produit au démarrage. J'ai manqué celui de démarrage car j'essayais généralement de rafraîchir la page plusieurs fois et je ne voyais donc l'erreur de visite répétée que quelques fois.

J'ai ensuite recherché des solutions à l'erreur de démarrage et la solution à cette question a fonctionné pour moi . En bref, il s'agit de mettre à jour le mod_wsgipackage de manière détournée.

Je recevais des avertissements depuis des mois sur l'incohérence des mod_wsgiversions, mais tout à coup, cela a entraîné des erreurs Apache 500. Cela n'a aucun sens pour moi.

Je suppose que cette RuntimeError: populate() isn't reentranterreur est généralement le signe qu'il faut rechercher une erreur de démarrage, ce qui indique le vrai problème.

en visite

[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

Commencez

[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'

Créez une nouvelle question. Ne posez pas de questions comme réponses.
Graham Dumpleton

1
Je ne pose pas de question. Publier une solution au même problème qui a fonctionné pour moi. Apache renvoie l'erreur 500 et l'erreur dans le fichier journal est la même que celle de la question posée ici. Veuillez relire ma réponse. :)
CoderGuy123

Incluez ensuite la solution réelle dans votre réponse plutôt que de créer un lien vers une autre question. Le problème est que cet autre article ne mentionne pas du tout le populate()problème et qu'il me semble être un problème entièrement différent, donc je ne vois pas comment vous pensez qu'il résolvait le même problème. Donc, pour autant que quiconque puisse le dire, vous aviez un problème différent pour lequel vous auriez dû poser une question distincte au début plutôt que de confondre les réponses ici pour ce qui ressemble à un problème différent basé sur les détails de cet autre article.
Graham Dumpleton

Il n'est pas nécessaire de répéter les étapes ici. Les erreurs apparaissent dans le même journal, juste que l'OP ici ne comprenait pas tout. Une erreur est affichée lors de l'accès à la page (c'est la partie dans OP ici), une autre lorsque Apache démarre (c'est la partie dans l'autre thread).
CoderGuy123

1

Je sais que cela fait un moment que cette question a été posée, mais je viens de rencontrer ce problème en raison d'un problème dont je n'ai pas vu discuter ici. J'obtenais l' RuntimeError: populate() isn't reentranterreur due à SELinux sur CentOS 7. J'ai fait servir Django à partir d'un répertoire personnel, et j'ai simplement dû activer le booléen SELinux qui permettait de lire les répertoires personnels, car l'erreur populate () était due à un problème d'autorisations. La solution pour moi était setsebool -P httpd_read_user_content 1. J'espère que cela aide quelqu'un ayant ce problème.


Nous avons eu le même problème avec CentOS 7 et SELinux. Nous l'avons corrigé en utilisant chconpour modifier le contexte du .sofichier de problème en httpd_sys_script_exec_t .
Jon

1

La multitude de réponses le rend clair; il s'agit d'une erreur générique qui peut avoir plusieurs causes profondes, généralement liées au chargement d'Apache / WSGI.

Toutes ces réponses sur cette page devraient fonctionner comme une sorte de liste de contrôle, et dans cette veine, je veux ajouter la cause racine de mon instance de cette erreur: échec de l'ajout d'un 'import os' à votre fichier settings.py.

Plus précisément, nous avions un développeur dans notre équipe qui avait l'intention de supprimer un package inutile, et a plutôt supprimé «import os» du haut du fichier de production settings.py. Après un redémarrage d'Apache, notre application ne redémarrait pas et nous avons reçu l'erreur redoutée «RuntimeError: populate () not reentrant».

Un rapide «python manage.py check» n'a pas révélé le problème, mais un «python settings.py» l'a fait; le package os n'a pas été chargé.

Si vous rencontrez cette erreur, concentrez votre recherche sur la vérification de vos fichiers settings.py et également de votre fichier WSGI.


3
Plus important encore, assurez-vous de retourner dans le journal des erreurs et de rechercher le tout premier message d'erreur qui se produit après le redémarrage de l'un des processus démon Apache ou mod_wsgi. Cette première erreur vous indiquera la vraie raison de l'erreur, toute demande ultérieure pour le même processus ne mentionnera que l' reentranterreur. En mode démon, assurez-vous également d'utiliser l' startup-timeoutoption si vous rencontrez ce problème en raison d'erreurs transitoires, plutôt que d'erreurs de codage. Au moins de cette façon, il peut récupérer automatiquement.
Graham Dumpleton

C'est la bonne réponse, l'erreur est générique, vérifiez le message juste avant l'erreur d'exécution.
Popieluch

1

RuntimeError: populate() isn't reentrant

Peut être n'importe quoi, c'est pourquoi il y a tant de réponses différentes à cette question.

L'astuce consiste à regarder le message d'erreur juste avant le RuntimeError. Dans votre cas, il semble y avoir une erreur de syntaxe dans le fichier /extra/www/htmlquotes/quotes_django/quotespage/admin.py à la ligne 15, voir:

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

1

Remarque sur AWS Elastic Beanstalk: la valeur par défaut settings.pyécrite par Django-admin inclut une référence à une base de données sqlite locale comme source de données. Cela fonctionnera probablement sur votre système d'exploitation local, mais pas sur AWS EB, et produira populate() isn't reentrantune erreur d'exécution. Pour tester cela, commentez simplement leDATABASES={<...>} instruction dans settings.py, déployez et rouvrez l'application.


Cela se produit, par exemple, si vous déployez sur AWS EB à l'aide de Django version 2.2 (ou ultérieure) avec la base de données sqlite par défaut. Vous serez django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).suivi par le RuntimeError: populate() isn't reentrant. Extrait de la documentation AWS : "Django 2.2 est incompatible avec la plate-forme Elastic Beanstalk Python 3.6." (au moment de la rédaction)
djvg

0

J'ai eu ce problème et je n'ai pas trouvé de réponse jusqu'à ce que je revienne sur mes commits. Apparemment, j'avais ajouté une importation accidentelle, à cause de l'auto-complétion, qui a foiré la configuration.

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

Dans le journal des erreurs Apache: RuntimeError ("populate () n'est pas réentrant")

Cela a bien fonctionné dans mon environnement de développement Windows mais a échoué sur le serveur ubuntu / apache.


0

J'allais dans cette même erreur après avoir changé l'ordre de ce paramètre:

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

le remettre dans l'ordre précédent et le redémarrage d'Apache ont résolu le problème.


0

Dans mon cas, j'avais un custom renderer classfor Django Rest Framework, dans un certain but, je devais remplacer la méthode de la classe de rendu "get_context" (divulgation complète: fairedjango toolbar nombre de requêtes SQL soit correct)

J'ai supprimé cette classe et redéployé. Ça a marché.


0

Dans mon cas, l'erreur s'est produite car un package pip requis était manquant.

J'ai donc fait un pip install -r requirements.txtapache redémarré et les choses ont fonctionné à nouveau.


0

La suppression du répertoire virtualenv, la recréation du virtualenv, puis la réinstallation de toutes les exigences l'ont résolu pour moi.


0

Ajout de ma raison à la liste. Pour moi, c'était parce que j'avais un service django nommé avec le même répertoire qu'un répertoire de processus. Renommer le processus / dir a résolu le problème.


0

J'ai eu un récursif django.setup(), par exemple j'ai essayé d'écrire un à l' django.setup()intérieur d'un an app/models.py, dans la trace de la pile, django a essayé de le signaler près de:

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

alors oui, assurez-vous de ne pas essayer de configurer django pendant que django est en cours de configuration ...


0

Le redémarrage du serveur Apache pour moi a résolu le problème. Vous pouvez le faire en utilisant la commande $ sudo service apache2 restart


0

J'ai eu ce même problème, ce qui a fonctionné pour moi était de commenter les paramètres de base de données par défaut dans / settings.py. J'ai aussi lu que les versions ultérieures de django ne sont pas compatibles avec ebs


0

Pour moi, l'erreur était un mysqlclientpackage manquant dans le fichier requirements.txt.

J'ai d'abord installé le mysqlclientpackage avec:

pip install mysqlclient

puis j'ai mis à jour le fichier requirements.txt avec:

pip freeze > requirements.txt

et cela a résolu mon problème.


-1

Dans mon cas, j'ai eu une importation circulaire, ce qui provoque une erreur qui rompt la méthode populate.


-1

Pour jeter mes 2 centimes d'euro:

J'ai recréé une configuration de travail dans Docker. La nouvelle configuration de Docker a échoué avec

populate isn't reentrant

ce qui semble être une erreur générique. Dans mon cas, j'ai oublié que

pip install Django

installe la dernière version ( 2.0) au lieu de la version requise 1.11. Changer ceci en

pip install Django==1.11

résolu mon problème.


-1

Je pense que c'est une erreur générique lorsque quelque chose ne va pas settings.py. Parfois, je peux trouver le problème par essais et erreurs en supprimant les applications installées une par une. Dans certains cas, ce n'est pas lié aux applications installées. Mais d'après mon expérience, dans tous les cas, c'est un problème dans le settings.pyfichier.


-1

vérifiez si vous avez mentionné deux fois les noms de vos API dans la section des applications installées de settings.py.

Définition de l'application

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

Définition de l'application

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

La suppression des entrées en double a résolu mon problème


mais le tutoriel dit INSTALLED_APPS = ['allauth', 'allauth.account', 'allauth.socialaccount',]
ming le

@ming C'est facultatif.
Swati Srivastava
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.