Django przestaje działać z RuntimeError: populate () nie jest ponownie wprowadzany

124

Pracowałem nad aplikacją internetową Django wdrożoną na serwerze Apache z WSGI i wszystko szło gładko. Dzisiaj dokonałem kilku drobnych zmian w mojej aplikacji, admin.pypróbując dostosować wbudowany interfejs Django Admin i początkowo popełniłem błąd składni (niezamknięty nawias). Oznaczało to, że kiedy dotknąłem wsgi.pyi załadowałem kod (mam WSGI działające w trybie demona na moim wirtualnym hoście), moja witryna została zastąpiona wewnętrznym błędem serwera, ponieważ WSGI zatrzymał się, gdy napotkał błąd składni.

Więc naprawiłem błąd składni, sprawdziłem, czy nie mam więcej z manage.py checki dotknąłem, wsgi.pyaby ponownie wdrożyć. Ale moja witryna nadal wyświetla wewnętrzny błąd serwera! Sprawdzając dzienniki Apache, widzę to:

[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

Pierwsza seria błędów pokazuje niepowodzenie WSGI z powodu błędu składni w my admin.py. Jednak druga seria błędów wydaje się wskazywać błąd wewnętrzny Django:

RuntimeError: populate() isn't reentrant

wyrzucony z populatemetody registry.py.

Wyszukiwanie w Google tego komunikatu o błędzie zwraca zaskakująco mało informacji, z których żadna nie pochodzi z dokumentacji Django. Najwyraźniej może się to czasami zdarzyć, jeśli dwukrotnie nadasz aplikacji nazwę settings.py, ale nie robię tego. Co ważniejsze, nie zmieniłem się settings.pyod momentu, w którym strona działała dobrze - jedyne, co zmieniłem, to admin.py.

Próbowałem cofnąć wszystkie zmiany, które wprowadziłem, więc cały mój kod Pythona powrócił do stanu, w jakim działała witryna - i nadal populate() isn't reentrantpojawia się błąd, gdy próbuję ponownie załadować kod WSGI!

Próbowałem także komentować różne aplikacje w sekcji INSTALLED_APPS settings.py, a nawet przy włączonym tylko „django.contrib.staticfiles” błąd nadal się pojawia. Co dziwne, nadal otrzymuję błąd, nawet jeśli skomentuję wszystkie aplikacje - Django zgłasza błąd, nawet jeśli nie ładuje żadnych aplikacji!

Czy ktoś wie, co się tutaj dzieje? Czy może jakikolwiek lepszy sposób na zdebugowanie tego błędu, ponieważ śledzenie w dzienniku Apache jest dość nieprzydatne?

Uwagi: używam Django 1.7, Apache 2.2 i Python 2.7.

Edward
źródło
2
Spróbuję usunąć wszystkie pliki .pyc, które mogą być w pobliżu.
dukebody
Nie, usunięcie wszystkich plików .pyc nie pomogło. Dotknięcie wsgi.pypowoduje ten sam błąd Apache, a pliki .pyc nie są odtwarzane.
Edward
1
Czy próbowałeś ponownie uruchomić Apache?
dukebody
Nie mogę zrestartować Apache, ponieważ nie mam uprawnień do na tym serwerze. Administrator z uprawnieniami roota wróci do biura dopiero w poniedziałek.
Edward
W moim przypadku nie była to zainstalowana aplikacja z INSTALLED_APPS w środowisku.
maciek

Odpowiedzi:

100

Jest to spowodowane błędem gdzieś w ustawieniach Django. Niestety, Django ukrywa błąd za tym ogólnym i nieprzydatnym komunikatem o błędzie.

Aby ujawnić prawdziwy problem, otwórz django/apps/registry.pyi wokół linii 80, wymień:

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

z:

self.app_configs = {}

Pozwoli to Django kontynuować ładowanie i ujawnić rzeczywisty błąd.

Napotkałem ten błąd z kilku różnych powodów. Kiedyś było tak, ponieważ miałem zły import w jednym z plików admin.py mojej aplikacji.

Cerin
źródło
22
To zdecydowanie najbardziej przydatna odpowiedź w tym wątku. Teraz wiem ->django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
RickyA
2
Uratował mi życie. To rozwiązanie pozwoliło mi z powodzeniem sprawdzić brakujące wymagania i błędy zgodności między nimi.
Ángel Jiménez
1
To było idealne. Zmiana tej jednej linii pozwoliła mi zobaczyć, że wystąpił prosty błąd importu. Nie mogłem powiedzieć, co się działo wcześniej.
James
4
Ta odpowiedź to czyste złoto.
xpanta
2
@RickyA i to był zdecydowanie najbardziej przydatny komentarz, ponieważ nawet nie musiałem zawracać sobie głowy tą odpowiedzią i po prostu spróbowałem pip install --upgrade psycopg2i to naprawiło.
Użytkownik
65

Administrator mojego serwera ponownie uruchomił Apache, co w magiczny sposób rozwiązało problem. Te same pliki Pythona zostały załadowane bez powodowania populate() isn't reentrant. Próbowałem nawet załadować inny plik z błędem składni, a następnie go naprawić, a serwer był w stanie załadować nowy plik i działać poprawnie bez żadnych problemów.

Nadal nie wiem, co się stało, ale oznaczam to jako odpowiedź, ponieważ problem zniknął. (Cóż, oznaczę to jako odpowiedź, gdy tylko StackOverflow pozwoli mi zaakceptować moją własną odpowiedź.)

Aktualizacja : Po dalszym wyświetlaniu tego błędu, gdy przypadkowo przesyłam Pythona z błędami składniowymi, znalazłem obejście, które jest łatwiejsze niż ponowne uruchomienie Apache. Kiedy WSGI zaczyna zgłaszać populate() isn't reentrantbłąd, zastępuję mój projekt Django wsgi.pytą prostą funkcją:

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

Następnie ponownie ładuję moją witrynę i ponownie uruchamia się proces demona WSGI (co mogę stwierdzić, patrząc na dziennik Apache, mimo że witryna nadal wyświetla ten sam błąd 500).

Jeśli następnie wsgi.pypowrócę do normalnego i ponownie załaduję, WSGI pomyślnie pobierze mój kod bez rzucania populate() isn't reentrant(zakładając, że tym razem nie mam błędów składniowych). Nie trzeba więc restartować całego Apache, tylko proces WSGI i mogę to zrobić bez uprawnień roota.

Edward
źródło
8
Dla mnie problemem nie była migracja zmian, które wprowadziłem do modelu w jednej z moich aplikacji.
user2662692
Ok, mam prawie ten sam problem i tak, zostaje on naprawiony po ponownym uruchomieniu komputera i ponownym uruchomieniu serwera. Ale problem się powtarza. Czasami nagle. w ciągu miesiąca wystąpił trzykrotnie. Jeśli ktoś ma jakiś pomysł, proszę o pomoc.
Rohit
@Rohit, jeśli potrzebujesz pomocy w swojej sytuacji, prawdopodobnie powinieneś zadać nowe pytanie opisujące ją. Jest mało prawdopodobne, aby uzyskać odpowiedź w komentarzach tutaj.
Edward
4
W startup-timeoutnowszych wersjach mod_wsgi dostępna jest opcja trybu demona mod_wsgi, która pomaga w usuwaniu błędów przejściowych podczas inicjalizacji Django, takich jak niedostępność bazy danych. Limit czasu spowoduje automatyczne ponowne uruchomienie procesu, jeśli aplikacja WSGI nie załaduje się poprawnie po upływie limitu czasu. Nawet to nie pomoże, gdy masz stały problem z własnym kodem. W takim przypadku szukaj pierwszego błędu, a nie populate()błędu, ponieważ poda on prawdziwy powód niepowodzenia kodu.
Graham Dumpleton
1
Co masz na myśli "wsgi.py projektu Django z tą prostą funkcją"? Jak zamienić plik na funkcję?
Cerin
46

Wiem, że to stara odpowiedź, ale przyczynię się do mojego rozwiązania:

Aby zdiagnozować źródło problemu, uruchom manage.py checki sprawdź, czy coś tam znajdziesz

W moim przypadku problemem był przestarzały wymóg, a django nie mógł zaimportować modułu podrzędnego

Upewnij się, że Twoje wymagania są aktualne

Jesus Gomez
źródło
2
Otrzymuję błąd 500 na Apache i nie mogę znaleźć problemu. Za pomocą tego polecenia manage.py checkznalazłem problem. Dziękuję Ci.
Ali Hesari
13

To nie jest odpowiedź, ale refleksja.

Kiedy aktualizujesz do django 1.7 i pojawia się błąd 500 i ponownie ładujesz stronę, Apache mówi „populate () nie jest ponownie wprowadzany”. Myślę, że to kiedy ładujesz swoją stronę, Apache ładuje wszystkie moduły potrzebne do twojej aplikacji, a kiedy błąd jest obsługiwany, nie rozładowuje modułu. Więc kiedy przeładujesz swoją stronę, apache załaduje ponownie te moduły, ale jest już załadowany. Tak więc apache mówi, że „populate () nie jest ponownie wprowadzany”.

Mam dwie czynności, aby to naprawić: Zrestartuj Apache lub popraw błąd, który obsługuje pierwszy błąd 5OO.

Spróbuj ponownie uruchomić Apache za pomocą:

sudo service httpd restart

Mam nadzieję, że ci to pomoże.

Vianney Thurotte
źródło
10

Jeśli otrzymujesz ten błąd podczas korzystania z Google App Engine, sprawdź dzienniki pod kątem innych błędów, które mogą go powodować. Dostawałem:

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

Nie możesz używać SQLite z Google App Engine, więc zakomentuj DATABASESsekcję settings.pyzatrzymania tego błędu, a także RuntimeError("populate() isn't reentrant")błąd.

donturner
źródło
To wyjaśnia, dlaczego wszystko działało dobrze lokalnie, ale otrzymało błąd 500 po wdrożeniu do GAE. Mała wskazówka: wyszukanie tekstu „podbicie” na stronie dziennika GAE wygenerowało dokładnie jedno trafienie, które doprowadziło do komunikatu błędu wskazanego przez donturnera. Jego rozwiązanie uratowało mi dzień :-)
Golden Thumb
4

Możesz to naprawić bez ponownego uruchamiania Apache, dotykając pliku (innego niż wsgi.py), który jest na wczesnym etapie procesu ładowania. Na przykład plik ustawień:

$ touch settings.py

Również tego nie rozwiązałem poprawnie, ale więcej informacji w moim pytaniu tutaj: Monitorowanie zmiany kodu nie działa z Django 1.7 na mod-wsgi

seddonym
źródło
2

Właśnie stanąłem przed tym samym problemem, więc zacząłem się rozglądać.

Teraz to działa, więc pomyślałem, że powinienem się tym z wami podzielić!

Wszystko zrobiłem było zrobić chown user:group /to/path -Ri chmod 770 /to/path -Rwszystko od nowa i to działało.

Behzad
źródło
2

Wygląda to na niezłą kolekcję prawidłowych odpowiedzi na ten sam błąd mod-wsgi Apache, każdy facet publikuje ten, który działa dla niego / niej, więc oto moje:

Nie zapomnij zaktualizować wymagań dotyczących projektu po wdrożeniu :)

José L. Patiño
źródło
2

Doświadczyłem tego samego problemu, a źródłem błędu był dla mnie po prostu błąd składni w pliku, z którym pracowałem. Po poprawieniu literówki populate() is not reentrantbłąd zniknął.

Jeśli uruchamiasz django ze skryptu wsgi, możesz być w stanie zidentyfikować literówkę, uruchamiając skrypt wsgi z wiersza poleceń. Na przykład:

cd /usr/local/www/wsgi-scripts/
python djangolauncher.wsgi
Piotr
źródło
2

Ten błąd jest również generowany w przypadku niespójnego wykorzystania spacji i tabulacji w kodzie.

webbyfox
źródło
1

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

Próbowałem wielu z tych rozwiązań bez powodzenia, ale potem zauważyłem, że dziennik błędów Apache zawiera dwa różne błędy w moim przypadku. Jedna, która ma miejsce, gdy ktoś próbuje odwiedzić stronę, a druga ma miejsce podczas uruchamiania. Przegapiłem ten startowy, ponieważ zwykle próbowałem kilkakrotnie odświeżyć stronę i dlatego błąd podczas wizyty powtarzał się tylko kilka razy.

Następnie zamiast tego szukałem rozwiązań błędu uruchamiania i rozwiązanie tego pytania zadziałało . Krótko mówiąc, polega na mod_wsgiokrężnej aktualizacji pakietu.

Od miesięcy otrzymywałem ostrzeżenia o niezgodności mod_wsgiwersji, ale nagle spowodowało to błąd Apache 500. Nie ma to dla mnie żadnego sensu.

Domyślam się, że ten RuntimeError: populate() isn't reentrantbłąd jest zwykle znakiem, że należy szukać błędu uruchamiania, który wskazuje na rzeczywisty problem.

podczas wizyty

[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

rozpocząć

[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
źródło
Utwórz nowe pytanie. Nie zadawaj pytań jako odpowiedzi.
Graham Dumpleton
1
Nie zadaję pytania. Publikowanie rozwiązania tego samego problemu, który działał u mnie. Apache zgłasza błąd 500, a błąd w pliku dziennika jest taki sam, jak ten w zadanym tutaj pytaniu. Przeczytaj ponownie moją odpowiedź. :)
CoderGuy123
Następnie uwzględnij rzeczywiste rozwiązanie w swojej odpowiedzi, zamiast łączyć się z innym pytaniem. Problem polega jednak na tym, że ten inny post w ogóle nie wspomina o tym populate()problemie i wydaje mi się, że jest to zupełnie inny problem, więc nie widzę, jak myślisz, jak rozwiązał ten sam problem. Tak więc, o ile ktokolwiek może stwierdzić, miałeś inny problem, dla którego powinieneś był zadać osobne pytanie na początku, zamiast mylić odpowiedzi tutaj, co wygląda na inny problem w oparciu o szczegóły w tym innym poście.
Graham Dumpleton
Nie ma potrzeby powtarzania tych kroków tutaj. Błędy pojawiają się w tym samym dzienniku, tylko że OP tutaj nie zawiera ich wszystkich. Jeden błąd jest wyświetlany, gdy uzyskuje się dostęp do strony (to jest część w OP tutaj), inny, gdy uruchamia się Apache (to jest część w drugim wątku).
CoderGuy123
1

Wiem, że minęło trochę czasu, odkąd zadano to pytanie, ale właśnie napotkałem ten problem z powodu problemu, którego tutaj nie widziałem. Otrzymałem RuntimeError: populate() isn't reentrantbłąd z powodu SELinux na CentOS 7. Miałem Django obsługiwane z katalogu domowego i po prostu musiałem włączyć wartość logiczną SELinux, która pozwalała na czytanie katalogów domowych, ponieważ błąd populate () był spowodowany problemem z uprawnieniami. Rozwiązaniem dla mnie było setsebool -P httpd_read_user_content 1. Mam nadzieję, że pomoże to komuś, kto ma ten problem.

Do gwiazd
źródło
Ten sam problem mieliśmy z CentOS 7 i SELinux. Naprawiliśmy to, używając chcondo zmiany kontekstu .sopliku powodującego problem na httpd_sys_script_exec_t .
Jon
1

Mnogość odpowiedzi wyjaśnia to; jest to ogólny błąd, który może mieć wiele głównych przyczyn, zwykle związanych z ładowaniem Apache / WSGI.

Wszystkie te odpowiedzi na tej stronie powinny funkcjonować jako rodzaj listy kontrolnej iw tym duchu chcę dodać główną przyczynę mojego wystąpienia tego błędu: niepowodzenie dodania „importu systemu operacyjnego” do pliku settings.py.

W naszym zespole mieliśmy programistę, który zamierzał usunąć niepotrzebny pakiet i zamiast tego usunął polecenie „import os” z początku pliku settings.py produkcyjnego. Po ponownym uruchomieniu Apache nasza aplikacja nie uruchomiła się ponownie i otrzymaliśmy przerażający błąd „RuntimeError: populate () not reentrant”.

Szybkie „python manage.py check” nie ujawniło problemu, ale „python settings.py” tak; pakiet systemu operacyjnego nie został załadowany.

Jeśli masz ten błąd, skoncentruj swoje wyszukiwanie na sprawdzeniu plików settings.py, a także pliku WSGI.

Tom Halpin
źródło
3
Co ważniejsze, pamiętaj, aby wrócić do dziennika błędów i poszukać pierwszego komunikatu o błędzie, który pojawia się po ponownym uruchomieniu jednego z procesów demona Apache lub mod_wsgi. Ten pierwszy błąd wskaże prawdziwą przyczynę błędu, a późniejsze żądania dotyczące tego samego procesu będą wskazywać reentranttylko błąd. W trybie demona upewnij się, że używasz startup-timeoutopcji, jeśli masz ten problem z powodu przejściowych błędów, a nie błędów kodowania. Przynajmniej w ten sposób może automatycznie odzyskać.
Graham Dumpleton
To jest prawidłowa odpowiedź, błąd jest ogólny, sprawdź komunikat tuż przed błędem wykonania.
Popieluch
1

RuntimeError: populate() isn't reentrant

Może być cokolwiek, dlatego jest tak wiele różnych odpowiedzi na to pytanie.

Sztuczka polega na spojrzeniu na komunikat o błędzie tuż przed RuntimeError. W twoim przypadku wydaje się, że w pliku /extra/www/htmlquotes/quotes_django/quotespage/admin.py w linii 15 jest błąd składniowy, zobacz:

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
źródło
1

Uwaga dotycząca AWS Elastic Beanstalk: Domyślnie settings.pynapisane przez Django-admin zawiera odniesienie do lokalnej bazy danych sqlite jako źródła danych. Prawdopodobnie zadziała to na twoim lokalnym systemie operacyjnym, ale nie na AWS EB i spowoduje populate() isn't reentrantbłąd w czasie wykonywania. Aby to sprawdzić, po prostu zakomentuj DATABASES={<...>}instrukcję w settings.py, wdróż i ponownie otwórz aplikację.

Początkujący użytkownik AWS EB
źródło
Dzieje się tak np. Jeśli wdrażasz na AWS EB przy użyciu Django w wersji 2.2 (lub nowszej) z domyślną bazą danych sqlite. Zostaniesz django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).śledzony przez RuntimeError: populate() isn't reentrant. Z dokumentacji AWS : „Django 2.2 jest niekompatybilne z platformą Elastic Beanstalk Python 3.6”. (w czasie pisania)
djvg
0

Miałem ten problem i nie mogłem znaleźć żadnej odpowiedzi, dopóki nie wycofałem swoich zatwierdzeń. Najwyraźniej dodałem przypadkowy import z powodu automatycznego uzupełniania, który zepsuł konfigurację.

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

W dzienniku błędów Apache: RuntimeError („populate () nie jest ponownie”)

Działało dobrze w moim środowisku deweloperskim Windows, ale nie działało na serwerze Ubuntu / Apache.

Jan
źródło
0

Miałem ten sam błąd po zmianie kolejności tego ustawienia:

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

przywrócenie go do porządku tutaj przed i ponowne uruchomienie Apache rozwiązało problem.

Romain Jouin
źródło
0

W moim przypadku miałem custom renderer classfor Django Rest Framework, w jakimś celu musiałem przesłonić metodę klasy renderowania "get_context" (pełne ujawnienie: aby django toolbarpodać poprawną liczbę zapytań SQL)

Usunąłem tę klasę i ponownie wdrożyłem. Zadziałało.

Karan Kumar
źródło
0

W moim przypadku błąd wystąpił z powodu braku wymaganego pakietu pip.

Zrobiłem więc pip install -r requirements.txt, zrestartowałem apache i wszystko znowu działało.

flix
źródło
0

Usunięcie katalogu virtualenv, ponowne utworzenie virtualenv, a następnie ponowna instalacja wszystkich wymagań naprawiło to za mnie.

Farid El Nasire
źródło
0

Dodanie powodu do listy. Dla mnie było tak, ponieważ miałem usługę django o nazwie z tym samym katalogiem, co katalog procesu. Zmiana nazwy procesu / katalogu rozwiązała problem.

znak
źródło
0

Miałem rekurencyjny django.setup(), np. Próbowałem napisać a django.setup()wewnątrz a app/models.py, w śladzie stosu django próbował wskazać to w pobliżu:

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

więc tak, pamiętaj, aby nie próbować konfigurować django podczas konfigurowania django ...

ThorSummoner
źródło
0

Ponowne uruchomienie serwera Apache rozwiązało problem. Możesz to zrobić za pomocą polecenia $ sudo service apache2 restart

Shivam Kohli
źródło
0

Miałem ten sam problem, co zadziałało, to wykomentowanie domyślnych ustawień bazy danych w / settings.py. Czytałem również, że późniejsze wersje django nie są kompatybilne z ebs

Steve Bien-Aime
źródło
0

U mnie błędem był brakujący mysqlclientpakiet w pliku Requirements.txt.

Najpierw zainstalowałem mysqlclientpakiet z:

pip install mysqlclient

następnie zaktualizowałem plik Requirements.txt o:

pip freeze > requirements.txt

i to rozwiązało mój problem.

Abdulwahab Alhendi
źródło
-1

W moim przypadku miałem cykliczny import, który powoduje błąd, który przerywa metodę populate.

Luis Carlos Mejia
źródło
-1

Aby dorzucić moje 2 centy:

Odtworzyłem działającą konfigurację w Dockerze. Nowa konfiguracja platformy Docker nie powiodła się

populate isn't reentrant

co wydaje się być ogólnym błędem. W moim przypadku to przeoczyłem

pip install Django

instaluje najnowszą wersję ( 2.0) zamiast wymaganej wersji 1.11. Zmieniam to na

pip install Django==1.11

naprawił mój problem.

Olaf Dietsche
źródło
-1

Myślę, że to ogólny błąd, gdy coś jest nie tak settings.py. Czasami mogę znaleźć problem metodą prób i błędów, usuwając zainstalowane aplikacje pojedynczo. W niektórych przypadkach nie jest to związane z zainstalowanymi aplikacjami. Ale z mojego doświadczenia we wszystkich przypadkach jest to problem w settings.pypliku.

Noel Puru
źródło
-1

sprawdź, czy dwa razy wymieniłeś nazwy swoich api w sekcji zainstalowanej aplikacji settings.py.

Definicja aplikacji

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

Definicja aplikacji

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

Usunięcie zduplikowanych wpisów rozwiązało mój problem

Swati Srivastava
źródło
ale samouczek mówi INSTALLED_APPS = ['allauth', 'allauth.account', 'allauth.socialaccount',]
ming
@ming To opcjonalne.
Swati Srivastava