Django smette di funzionare con RuntimeError: populate () non è rientrante


123

Ho sviluppato un'applicazione web Django distribuita su un server Apache con WSGI e tutto è andato per il meglio. Oggi, ho apportato alcune piccole modifiche alla mia app admin.pynel tentativo di personalizzare l'interfaccia di amministrazione di Django incorporata e inizialmente ho commesso un errore di sintassi (una parentesi non chiusa). Ciò significava che quando ho toccato wsgi.pye caricato il codice (ho WSGI in esecuzione in modalità daemon sul mio host virtuale), il mio sito Web è stato sostituito con un errore del server interno perché WSGI si è fermato quando ha colpito l'errore di sintassi.

Quindi ho corretto l'errore di sintassi, controllato di non averne più manage.py checke ho toccato wsgi.pyper ridistribuire. Ma il mio sito web mostra ancora un errore interno del server! Controllando i log di Apache, questo è quello che vedo:

[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 prima serie di errori mostra un errore WSGI a causa dell'errore di sintassi nel file admin.py. Tuttavia, la seconda serie di errori sembra mostrare un errore interno a Django:

RuntimeError: populate() isn't reentrant

lanciato dal populatemetodo di registry.py.

Cercare su Google questo messaggio di errore restituisce sorprendentemente poche informazioni, nessuna dalla documentazione di Django. Apparentemente, a volte può succedere se assegni due volte a un'app nel tuo settings.py, ma non lo sto facendo. Ancora più importante, non sono cambiato settings.pydal punto in cui il sito web funzionava bene - l'unica cosa che ho cambiato è stata admin.py.

Ho provato a ripristinare tutte le modifiche apportate, quindi tutto il mio codice Python è tornato nello stato in cui era quando il sito Web funzionava e ricevo ancora l' populate() isn't reentranterrore quando provo a ricaricare il codice in WSGI!

Ho anche provato a commentare diverse app nella sezione settings.pyINSTALLED_APPS di , e anche con solo 'django.contrib.staticfiles' abilitato l'errore si verifica ancora. Stranamente, ricevo ancora l'errore anche se commento tutte le app: Django genera l'errore anche quando non carica alcuna app!

Qualcuno sa cosa sta succedendo qui? O un modo migliore per me per eseguire il debug di questo errore, dal momento che il traceback nel registro di Apache è piuttosto inutile?

Note: sto usando Django 1.7, Apache 2.2 e Python 2.7.


2
Proverei a rimuovere tutti i file .pyc che potrebbero essere in giro.
dukebody

No, la rimozione di tutti i file .pyc non ha aiutato. Toccando si wsgi.pyottiene lo stesso errore di Apache e i file .pyc non vengono ricreati.
Edward

1
Hai provato a riavviare Apache?
dukebody

Non riesco a riavviare Apache perché non ho i diritti su questo server. L'amministratore con accesso root non tornerà in ufficio fino a lunedì.
Edward

Nel mio caso non è stata installata l'app da INSTALLED_APPS nell'ambiente.
maciek

Risposte:


99

Ciò è causato da un bug nelle impostazioni di Django da qualche parte. Sfortunatamente, Django sta nascondendo il bug dietro questo messaggio di errore generico e inutile.

Per rivelare il vero problema, apri django/apps/registry.pye intorno alla riga 80, sostituisci:

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

con:

self.app_configs = {}

Ciò consentirà a Django di continuare a caricare e rivelare l'errore effettivo.

Ho riscontrato questo errore per diverse cause. Una volta era perché avevo una cattiva importazione in una delle mie app admin.py.


22
Questa è di gran lunga la risposta più utile in questo thread. Ora lo so ->django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
RickyA

2
Salvato la mia vita. Questa soluzione mi ha permesso di verificare con successo i requisiti mancanti e gli errori di compatibilità tra di loro.
Ángel Jiménez

1
Questo è stato perfetto. La modifica di quella riga mi ha fatto vedere che ho avuto un semplice errore di importazione. Non riuscivo a capire cosa stesse succedendo prima.
James

4
Questa risposta è oro puro.
xpanta

2
@ RickyA e questo è stato di gran lunga il commento più utile in quanto non ho nemmeno dovuto preoccuparmi di questa risposta e ho semplicemente provato pip install --upgrade psycopg2e risolto.
Utente

65

L'amministratore del mio server ha riavviato Apache e questo ha risolto magicamente questo problema. Gli stessi identici file Python caricati senza causare populate() isn't reentrant. Ho anche provato a caricare un altro file con un errore di sintassi, quindi a risolverlo e il server è stato in grado di caricare il nuovo file ed eseguire correttamente senza problemi.

Non so ancora cosa stava andando storto, ma lo contrassegno come risposta poiché il problema è scomparso. (Bene, lo contrassegnerò come risposta non appena StackOverflow mi consentirà di accettare la mia risposta.)

Aggiornamento : dopo aver continuato a ricevere questo errore quando ho caricato accidentalmente Python con errori di sintassi, ho trovato una soluzione alternativa che è più semplice del riavvio di Apache. Quando WSGI inizia a lanciare l' populate() isn't reentranterrore, sostituisco il mio progetto Django wsgi.pycon questa semplice funzione:

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

Quindi ricarico il mio sito Web e il processo del daemon WSGI si riavvia (cosa che posso dire guardando il registro di Apache, anche se il sito Web visualizza ancora lo stesso errore 500).

Se poi wsgi.pyritorno alla normalità e ricarico di nuovo, WSGI raccoglie con successo il mio codice senza lanciarlo populate() isn't reentrant(supponendo che questa volta non abbia errori di sintassi). Quindi la totalità di Apache non ha bisogno di riavviarsi, solo il processo WSGI, e posso farlo senza i privilegi di root.


8
Per me il problema non era la migrazione delle modifiche apportate a un modello in una delle mie app.
user2662692

Ok, sto affrontando quasi lo stesso problema e sì, viene risolto riavviando la macchina e riavviando il server. Ma il problema continua a ripetersi. A volte all'improvviso. entro un mese si è verificato tre volte. Se qualcuno ha un'idea, per favore aiutatemi.
Rohit

@Rohit, se vuoi aiuto con la tua situazione, dovresti probabilmente pubblicare una nuova domanda che la descriva. È improbabile che tu riceva una risposta nei commenti qui.
Edward

4
C'è startup-timeoutun'opzione per la modalità demone di mod_wsgi nelle versioni più recenti di mod_wsgi che aiuta a recuperare da errori temporanei quando Django viene inizializzato, come un database non disponibile. Il timeout causerà il riavvio automatico del processo se l'applicazione WSGI non viene caricata correttamente dopo il periodo di timeout. Anche questo non ti aiuterà se hai un problema permanente con il tuo codice. In tal caso, cerca il primo errore, non l' populate()errore in quanto fornirà il vero motivo per cui il tuo codice fallisce.
Graham Dumpleton

1
Cosa intendi con "wsgi.py del progetto Django con questa semplice funzione"? Come si sostituisce un file con una funzione?
Cerin

46

So che questa è una vecchia risposta ma contribuirò con la mia soluzione:

Come modo per diagnosticare l'origine del problema, corri manage.py checke vedi se trovi qualcosa lì

Nel mio caso il problema era un requisito obsoleto e django non riusciva a importare un sottomodulo

Assicurati che i tuoi requisiti siano aggiornati


2
Ottengo l'errore 500 su Apache e non riesco a trovare il problema. Con questo comando manage.py checkho trovato il problema. Grazie.
Ali Hesari

13

Non è una risposta ma una riflessione.

Quando si aggiorna a django 1.7 e si verifica un errore 500 e si ricarica la pagina, Apache dice "populate () non è rientrante". Penso che quando carichi la tua pagina, Apache carica tutti i moduli necessari per la tua app e quando l'errore è gestito non scarica il modulo. Quindi, quando ricarichi la tua pagina, apache carica di nuovo questi moduli ma è già caricato. Quindi, apache dice "populate () non è rientrante".

Ho due azioni per correggere questo: riavviare apache o correggere l'errore che gestisce il primo errore 5OO.

Prova a riavviare Apache con:

sudo service httpd restart

Spero ti possa aiutare.


10

Se ricevi questo errore quando utilizzi Google App Engine, controlla i tuoi log per altri errori che potrebbero essere la causa. Stavo ottenendo:

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

Non è possibile utilizzare SQLite con Google App Engine, quindi commentare la DATABASESsezione settings.pydell'errore interrotto e anche l' RuntimeError("populate() isn't reentrant")errore.


Questo spiega perché tutto ha funzionato correttamente a livello locale ma ha ricevuto l'errore 500 quando distribuito su GAE. Un piccolo suggerimento: la ricerca del testo "raise" nella pagina di log di GAE ha generato un risultato esatto che ha portato al messaggio di errore indicato da donturner. La sua soluzione mi ha salvato la giornata :-)
Golden Thumb



2

Ho appena affrontato lo stesso problema, quindi ho iniziato a guardarmi intorno.

Ora funziona, quindi ho pensato di condividerlo con voi ragazzi!

Tutto quello che ho fatto è stato fare chown user:group /to/path -Re chmod 770 /to/path -Rtutto da capo e ha funzionato.


2

Questa sembra una bella raccolta di risposte valide per lo stesso errore mod-wsgi di Apache, ogni ragazzo che pubblica quello che funziona per lui / lei, quindi ecco il mio:

Non dimenticare di aggiornare i requisiti del tuo progetto dopo la distribuzione :)


2

Ho riscontrato lo stesso problema e la fonte dell'errore per me era solo un errore di sintassi in un file con cui stavo lavorando. Dopo aver corretto l'errore di battitura, l' populate() is not reentranterrore è scomparso.

Se stai eseguendo django da uno script wsgi, potresti essere in grado di identificare l'errore di battitura semplicemente eseguendo lo script wsgi dalla riga di comando. Per esempio:

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

2

Questo errore viene generato anche in caso di incoerenza nell'utilizzo di spazio e tabulazione nel codice.


1

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

Ho provato molte di queste soluzioni senza fortuna, ma poi ho notato che il log degli errori di Apache contiene due errori diversi nel mio caso. Uno che accade quando qualcuno cerca di visitare una pagina, un altro che accade all'avvio. Ho perso quello di avvio perché di solito ho provato ad aggiornare la pagina un paio di volte e quindi ho visto l'errore di visita ripetuto solo poche volte.

Ho quindi cercato soluzioni all'errore di avvio e la soluzione a questa domanda ha funzionato per me . In breve, si tratta di aggiornare il mod_wsgipacchetto in modo indiretto.

Ho ricevuto avvisi per mesi sulla mancata corrispondenza nelle mod_wsgiversioni, ma improvvisamente è risultato l'errore di Apache 500. Non ha alcun senso per me.

La mia ipotesi è che questo RuntimeError: populate() isn't reentranterrore sia solitamente un segno che si dovrebbe cercare un errore di avvio, che indica il vero problema.

in visita

[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

avviare

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

Crea una nuova domanda. Non fare domande come risposte.
Graham Dumpleton

1
Non sto facendo una domanda. Pubblicare una soluzione allo stesso problema che ha funzionato per me. Apache genera l'errore 500 e l'errore nel file di registro è lo stesso di quello nella domanda posta qui. Per favore rileggi la mia risposta. :)
CoderGuy123

Quindi includi la soluzione effettiva nella tua risposta piuttosto che collegarti a un'altra domanda. Il problema è però che quell'altro post non menziona affatto il populate()problema e a me sembra un problema completamente diverso, quindi non riesco a vedere come pensi che abbia risolto lo stesso problema. Quindi, per quanto chiunque può dire, hai avuto un problema diverso per il quale avresti dovuto porre una domanda separata all'inizio piuttosto che confondere le risposte qui per quello che sembra un problema diverso in base ai dettagli in quell'altro post ..
Graham Dumpleton

Non è necessario ripetere i passaggi qui. Gli errori vengono visualizzati nello stesso registro, solo che l'OP qui non lo includeva tutto. Un errore viene mostrato quando si accede alla pagina (questa è la parte in OP qui), un altro quando si avvia Apache (questa è la parte nell'altro thread).
CoderGuy123

1

So che è passato un po 'di tempo da quando è stata posta questa domanda, ma mi sono imbattuto in questo problema a causa di un problema che non ho visto discusso qui. Ricevo l' RuntimeError: populate() isn't reentranterrore a causa di SELinux su CentOS 7. Avevo Django servito da una directory home e dovevo semplicemente abilitare il booleano SELinux che consentiva la lettura delle directory home, poiché l'errore populate () era dovuto a un problema di autorizzazioni. La soluzione per me era setsebool -P httpd_read_user_content 1. Spero che questo aiuti qualcuno che ha questo problema.


Abbiamo avuto lo stesso problema con CentOS 7 e SELinux. Lo abbiamo risolto utilizzando chconper modificare il contesto del .sofile problematico in httpd_sys_script_exec_t .
Jon

1

La moltitudine di risposte lo rende chiaro; questo è un errore generico che può avere più cause principali, in genere correlate al caricamento di Apache / WSGI.

Tutte queste risposte in questa pagina dovrebbero funzionare come una sorta di lista di controllo, e in questo senso voglio aggiungere la causa principale della mia istanza di questo errore: la mancata aggiunta di un "sistema operativo di importazione" al file settings.py.

Nello specifico, avevamo uno sviluppatore nel nostro team che intendeva rimuovere un pacchetto non necessario e invece ha rimosso "import os" dalla parte superiore del file settings.py di produzione. Dopo un riavvio di Apache, la nostra applicazione non si riavviava e abbiamo ricevuto il temuto errore "RuntimeError: populate () non rientra".

Un rapido 'controllo python manage.py' non ha rivelato il problema, ma un 'python settings.py' sì; il pacchetto del sistema operativo non è stato caricato.

Se si verifica questo errore, concentra la ricerca sul controllo dei file settings.py e anche del file WSGI.


3
Ancora più importante, assicurati di tornare indietro nel registro degli errori e cercare il primo messaggio di errore che si verifica dopo il riavvio di uno dei processi del demone Apache o mod_wsgi. Quel primo errore ti dirà il vero motivo dell'errore, eventuali richieste successive per lo stesso processo menzioneranno reentrantsolo l' errore. In modalità demone, assicurati anche di utilizzare l' startup-timeoutopzione se hai questo problema a causa di errori temporanei, piuttosto che di errori di codifica. Almeno in questo modo può recuperare automaticamente.
Graham Dumpleton

Questa è la risposta giusta, l'errore è generico, controlla il messaggio appena prima del runtimeerror.
Popieluch

1

RuntimeError: populate() isn't reentrant

Può essere qualsiasi cosa, ecco perché ci sono così tante risposte diverse a questa domanda.

Il trucco è guardare il messaggio di errore appena prima del file RuntimeError. Nel tuo caso sembra esserci un errore di sintassi nel file /extra/www/htmlquotes/quotes_django/quotespage/admin.py alla riga 15, vedi:

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

Nota su AWS Elastic Beanstalk: l'impostazione predefinita settings.pyscritta da Django-admin include un riferimento a un database sqlite locale come origine dati. Questo probabilmente funzionerà sul tuo sistema operativo locale, ma non su AWS EB, e fornirà l' populate() isn't reentranterrore di runtime. Per verificare ciò, è sufficiente commentare l' DATABASES={<...>}istruzione settings.py, distribuire e riaprire l'applicazione.


Ciò si verifica, ad esempio, se esegui la distribuzione su AWS EB utilizzando Django versione 2.2 (o successiva) con il database sqlite predefinito. Sarai django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).seguito dal file RuntimeError: populate() isn't reentrant. Dai documenti AWS : "Django 2.2 non è compatibile con la piattaforma Elastic Beanstalk Python 3.6". (al momento in cui scrivo)
djvg

0

Ho avuto questo problema e non sono riuscito a trovare alcuna risposta sul motivo fino a quando non ho eseguito il backtrack dei miei commit. A quanto pare avevo aggiunto un'importazione accidentale, a causa del completamento automatico, che ha rovinato la configurazione.

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

Nel log degli errori di Apache: RuntimeError ("populate () non è rientrante")

Ha funzionato bene nel mio ambiente di sviluppo Windows, ma non è riuscito sul server Ubuntu / Apache.


0

Stavo andando in questo stesso errore dopo aver cambiato l'ordine di questa impostazione:

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

rimetterlo nell'ordine qui prima e riavviare Apache ha risolto il problema.


0

Nel mio caso, avevo un custom renderer classper Django Rest Framework, per qualche scopo ho dovuto sovrascrivere il metodo della classe renderer "get_context" (divulgazione completa: per django toolbardare il conteggio corretto delle query SQL)

Ho rimosso quella classe e ho ridistribuito. Ha funzionato.


0

Nel mio caso l'errore si è verificato perché mancava un pacchetto pip richiesto.

Quindi ho eseguito un pip install -r requirements.txtriavvio di Apache e le cose hanno funzionato di nuovo.


0

Rimuovendo la directory virtualenv, ricreando virtualenv, quindi reinstallando tutti i requisiti, l'ho risolto per me.


0

Aggiungendo la mia ragione all'elenco. Per me era perché avevo un servizio django denominato con la stessa directory di una directory di processo. Rinominare il processo / dir ha risolto il problema.


0

Avevo un ricorsivo django.setup(), ad esempio ho provato a scrivere un django.setup()all'interno di un app/models.py, nella traccia dello stack django ha cercato di indicarlo vicino:

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

quindi sì, assicurati di non provare a configurare django mentre django è in fase di configurazione ...


0

Il riavvio del server Apache per me ha risolto il problema. Puoi farlo usando il comando $ sudo service apache2 restart


0

Ho avuto lo stesso problema, ciò che ha funzionato per me è stato commentare le impostazioni del database predefinite in / settings.py. Ho anche letto che le versioni successive di django non sono compatibili con ebs


0

Per me l'errore era un mysqlclientpacchetto mancante nel file requirements.txt.

Per prima cosa ho installato il mysqlclientpacchetto con:

pip install mysqlclient

quindi ho aggiornato il file requirements.txt con:

pip freeze > requirements.txt

e questo ha risolto il mio problema.


-1

Nel mio caso, ho avuto un'importazione circolare, che causa un errore che interrompe il metodo di popolamento.


-1

Per buttare i miei 2 centesimi di euro:

Ho ricreato una configurazione funzionante in Docker. La nuova configurazione Docker non è riuscita con

populate isn't reentrant

che sembra essere un errore generico. Nel mio caso, l'ho trascurato

pip install Django

installa l' ultima versione ( 2.0), invece della versione richiesta 1.11. Cambiandolo in

pip install Django==1.11

risolto il mio problema.


-1

Penso che questo sia un errore generico quando qualcosa non va settings.py. A volte posso trovare il problema per tentativi ed errori rimuovendo le app installate una alla volta. In alcuni casi, non è correlato alle app installate. Ma dalla mia esperienza, in tutti i casi è un problema all'interno del settings.pyfile.


-1

controlla di aver menzionato due volte i nomi delle tue API nella sezione delle app installate di settings.py.

Definizione dell'applicazione

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

Definizione dell'applicazione

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

La rimozione delle voci duplicate ha risolto il mio problema


ma il tutorial dice INSTALLED_APPS = ['allauth', 'allauth.account', 'allauth.socialaccount',]
ming

@ming È opzionale.
Swati Srivastava
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.