Django перестає працювати з RuntimeError: populate () не є ретентом


123

Я розробляв веб-додаток Django, розгорнутий на сервері Apache з WSGI, і все пройшло без проблем. Сьогодні я вніс кілька незначних змін у додаток, admin.pyнамагаючись налаштувати вбудований інтерфейс адміністратора Django, і спочатку допустив синтаксичну помилку (незакриті дужки). Це означало, що коли я торкнувся wsgi.pyта завантажив код (у мене на віртуальному хості працює WSGI в режимі демон), мій веб-сайт був замінений на внутрішню серверну помилку, оскільки WSGI зупинився, коли він потрапив у синтаксичну помилку.

Тож я виправив синтаксичну помилку, перевірив, що у мене більше не було manage.py check, і торкнувся wsgi.pyповторного використання. Але на моєму веб-сайті все ще відображається внутрішня помилка сервера! Перевірка журналів Apache, ось що я бачу:

[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

Перша серія помилок показує збій WSGI через синтаксичну помилку в моєму admin.py. Однак друга серія помилок, схоже, показує внутрішню помилку Django:

RuntimeError: populate() isn't reentrant

викинуто з populateметоду registry.py.

Гугл цього повідомлення про помилку повертає напрочуд мало інформації, жодна з документації Django. Мабуть, іноді це може статися, якщо ви назвете додаток двічі у своєму settings.py, але я цього не роблю. Що ще важливіше, я не змінився settings.pyз моменту, коли веб-сайт працював нормально - єдине, що я змінив, було admin.py.

Я спробував відновити всі внесені вами зміни, тому весь мій код Python повернувся в такий стан, як це було, коли веб-сайт працював - і я все одно отримую populate() isn't reentrantпомилку, коли намагаюся змусити WSGI перезавантажити код!

Я також спробував коментувати різні додатки в розділі INSTALLED_APPS settings.py, і навіть із увімкненою лише функцією "django.contrib.staticfiles" помилка все ж трапляється. Дивно, що я все-таки отримую помилку, навіть якщо я коментую всі програми - Django видаляє помилку, навіть якщо вона не завантажує жодні програми!

Хтось знає, що тут відбувається? Або будь-який кращий спосіб для мене налагодити цю помилку, оскільки прослідкування в журналі Apache досить непосильне?

Примітки: я використовую Django 1.7, Apache 2.2 та Python 2.7.


2
Я б спробував видалити всі файли .pyc, які можуть бути навколо.
герцог

Ні, видалення всіх .pyc файлів не допомогло. Торкання wsgi.pyпризводить до тієї ж помилки Apache, а файли .pyc не відтворюються.
Едвард

1
Ви спробували перезапустити Apache?
герцог

Я не можу перезапустити Apache, тому що не маю прав на цей сервер. Адміністратор з кореневим доступом не повернеться в офіс до понеділка.
Едвард

У моєму випадку це не було встановлено додаток від INSTALLED_APPS в оточенні.
maciek

Відповіді:


99

Це спричинено помилкою в налаштуваннях Джанго десь. На жаль, Джанго ховає помилку за цим загальним і не корисним повідомленням про помилку.

Щоб виявити справжню проблему, відкрийте django/apps/registry.pyі навколо лінії 80 замініть:

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

з:

self.app_configs = {}

Це дозволить Django продовжувати завантаження та виявить фактичну помилку.

З цією помилкою я стикався з кількох різних причин. Колись це було через те, що я погано імпортував один з адміністраторів.


22
Це, безумовно, найкорисніша відповідь у цій темі. Тепер я знаю ->django.core.exceptions.ImproperlyConfigured: psycopg2_version 2.5.4 or newer is required; you have 2.5 (dt dec pq3 ext)
RickyA

2
Врятувало мені життя. Це рішення дозволило мені успішно перевірити відсутність вимог та помилки сумісності між ними.
Ángel Jiménez

1
Це було ідеально. Якщо змінити один рядок, я побачу, що у мене була проста помилка імпорту. Я не міг сказати, що відбувається до цього.
Джеймс

4
Ця відповідь - чисте золото.
xpanta

2
@RickyA, і це був, безумовно, найкорисніший коментар, оскільки мені навіть не довелося зациклюватися на цій відповіді, а просто спробував pip install --upgrade psycopg2і це виправити.
Користувач

65

Адміністратор мого сервера перезапустив Apache, і це магічно вирішило цю проблему. Точні самі файли Python завантажуються без викликання populate() isn't reentrant. Я навіть спробував завантажити інший файл із синтаксичною помилкою, потім виправив його, і сервер зміг завантажити новий файл і запустити правильно без проблем.

Я досі не знаю, що пішло не так, але я відзначаю це як відповідь, оскільки проблема пішла. (Ну, я позначу це як відповідь, як тільки StackOverflow дозволить мені прийняти власну відповідь.)

Оновлення : продовжуючи отримувати цю помилку, коли я випадково завантажував Python із синтаксичними помилками, я з’ясував вирішення, яке простіше, ніж перезапуск Apache. Коли WSGI починає видавати populate() isn't reentrantпомилку, я замінюю свої проекти Django на wsgi.pyцю просту функцію:

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

Потім я перезавантажую свій веб-сайт, і процес демон демону WSGI перезапускається (про що я можу сказати, переглянувши журнал Apache, хоча на веб-сайті все ще відображається однакова помилка 500).

Якщо потім я wsgi.pyперейду до звичайного і знову перезавантажуюсь, WSGI успішно забирає мій код, не кидаючи populate() isn't reentrant(припустимо, що цього разу у мене немає синтаксичних помилок). Таким чином, не потрібно перезапускати цілість Apache, просто процес WSGI, і я можу це зробити без привілеїв root.


8
Для мене проблемою було не міграція змін, які я вніс до моделі в одному зі своїх додатків.
користувач2662692

Гаразд, я стикаюся з майже тією ж проблемою, і так, це виправляється при перезавантаженні машини та перезапуску сервера. Але проблема постійно повторюється. Іноді раптом. протягом місяця він стався тричі. Якщо хтось має якусь ідею, будь ласка, допоможіть.
Рохіт

@Rohit, якщо ви хочете допомогти у своїй ситуації, вам, мабуть, слід написати нове запитання, яке описує це. Ви навряд чи отримаєте відповідь у коментарях тут.
Едвард

4
Існує startup-timeoutможливість для демонстраційного режиму mod_wsgi в останніх версіях mod_wsgi, який допомагає відновитись після тимчасових помилок при ініціалізації Django, наприклад, база даних не доступна. Час очікування призведе до автоматичного запуску процесу, якщо програма WSGI не завантажиться належним чином після періоду очікування. Навіть це не допоможе, коли у вас є постійні проблеми з власним кодом. У такому випадку шукайте першу помилку, а не populate()помилку, оскільки це дасть справжню причину відмови вашого коду.
Грем Дамплтон

1
Що ви маєте на увазі "wsgi.py проекту Django з цією простою функцією"? Як ви замінюєте файл функцією?
Серін

46

Я знаю, що це стара відповідь, але я докладу свого рішення:

Як діагностувати джерело проблеми, запустіть manage.py checkі подивіться, чи знайдете ви там щось

У моєму випадку застаріла вимога була проблемою, і django не вдалося імпортувати підмодуль

Переконайтесь, що ваші вимоги актуальні


2
Я отримую помилку 500 на Apache, і я не можу знайти проблему. За цією командою manage.py checkя знайшов проблему. Дякую.
Алі Хесарі

13

Це не відповідь, а рефлексія.

Коли ви переходите на django 1.7 і у вас виникає помилка 500 і перезавантажуєте сторінку, Apache каже, що "populate () не є ретентом". Я думаю, що це коли ви завантажуєте свою сторінку, Apache завантажує всі необхідні для вашої програми модулі, і коли помилка виправляється, модуль не розвантажує. Отже, коли ви перезавантажуєте свою сторінку, apache знову завантажує тези модулів, але вона вже завантажена. Отже, apache каже, що "populate () не є ретентом".

У мене є дві дії, щоб виправити це: Перезапустіть apache або виправте помилку, яка обробляє першу помилку 5OO.

Спробуйте перезапустити apache за допомогою:

sudo service httpd restart

Сподіваюся, це допоможе тобі.


10

Якщо ви отримуєте цю помилку під час використання Google App Engine, перевірте свої журнали на наявність інших помилок, які можуть викликати це. Я отримував:

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

Ви не можете використовувати SQLite з Google App Engine, тому коментуючи DATABASESрозділ, який settings.pyзупинив цю помилку та RuntimeError("populate() isn't reentrant")помилку.


Це пояснює, чому все працювало нормально локально, але при розгортанні в GAE сталася помилка 500. Невеликий натяк: пошук тексту "підняти" на сторінці журналу GAE генерував саме один звернення, яке призвело до повідомлення про помилку, на яке вказував donturner. Його рішення врятувало мені день :-)
Золотий палець

4

Ви можете виправити це, не перезапустивши Apache, торкнувшись файлу (крім wsgi.py), який знаходиться на початку процесу завантаження. Наприклад, ваш файл налаштувань:

$ touch settings.py

Я також не вирішив належним чином це, але більше інформації у моєму запитанні тут: Моніторинг змін коду, що працює з Django 1.7 на mod-wsgi



2

Я просто зіткнувся з тією ж проблемою, тому почав оглядатися.

Зараз у мене це працює, тому я подумав, що мушу поділитися ним із вами, хлопці!

Все, що я робив, робив chown user:group /to/path -Rі chmod 770 /to/path -Rзнову, і це спрацювало.


2

Це виглядає як приємна колекція дійсних відповідей на ту саму помилку Apache mod-wsgi, кожен хлопець розміщує ту, яка працює для нього / її, тож ось моя:

Не забудьте оновити свої вимоги проекту після розгортання :)


2

Я відчув цю ж проблему, і джерелом помилки для мене була лише синтаксична помилка у файлі, з яким я працював. Після виправлення друкарської populate() is not reentrantпомилки помилка зникла.

Якщо ви запускаєте django зі сценарію wsgi, ви можете виявити помилку помилки, просто запустивши скрипт wsgi з командного рядка. Наприклад:

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

2

Ця помилка також генерується, якщо непослідовно використовувати простір та вкладку в коді.


1

Налаштування: Ubuntu 14.04, Django 1.10, Python 3.5 (in virtualenv).

Я спробував безліч удач із цих рішень, але потім помітив, що журнал помилок Apache містить у моєму випадку дві різні помилки. Одне, що відбувається, коли хтось намагається відвідати сторінку, інше, що відбувається при запуску. Я пропустив стартовий, тому що, як правило, намагався оновити сторінку пару разів, і таким чином лише кілька разів бачив помилку під час відвідування.

Потім я шукав рішення помилки при запуску, і рішення цього питання працювало на мене . Якщо коротко, це включає оновлення mod_wsgiпакета в обхідному вигляді.

Я місяцями отримував попередження про невідповідність mod_wsgiверсій, але раптом це призвело до помилки Apache 500. Це не має для мене сенсу.

Я здогадуюсь, що ця RuntimeError: populate() isn't reentrantпомилка зазвичай є ознакою того, що слід шукати помилку при запуску, яка вказує на реальну проблему.

у гості

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

Створіть нове запитання. Не задайте питання як відповіді.
Грем Дамплтон

1
Я не задаю питання. Опублікувати рішення тієї ж проблеми, яка працювала і на мене. Apache видає помилку 500, і помилка у файлі журналу така сама, як помилка, задана тут. Будь ласка, перечитайте мою відповідь. :)
CoderGuy123

Тоді включіть у відповідь власне рішення, а не посилайтесь на інше питання. Проблема полягає в тому, що в іншому дописі це populate()питання взагалі не згадується, і мені це виглядає як зовсім інша проблема, тому я не можу зрозуміти, як ви думаєте, що він вирішував ту саму проблему. Тож, наскільки хто може сказати, у вас виникла інша проблема, яку вам слід було б задати окремим питанням на початку, а не плутати відповіді тут на те, що схоже на іншу проблему, грунтуючись на деталях у цій іншій публікації ..
Грем Дамплтон

Тут непотрібно повторювати кроки. Помилки відображаються в одному журналі, тільки що ОП тут не включав усіх. Одна помилка відображається під час доступу до сторінки (це частина OP тут), інша при запуску Apache (це частина в іншому потоці).
CoderGuy123

1

Я знаю, що минув час, коли це питання було задано, але я просто зіткнувся з цим питанням через проблему, яку я не бачив тут обговорюваної. Я отримував RuntimeError: populate() isn't reentrantпомилку через SELinux на CentOS 7. У мене Django виходив із домашнього каталогу, і я просто повинен був включити булевий файл SELinux, який дозволяв читати домашні каталоги, оскільки помилка populate () була пов’язана з проблемою дозволів. Рішення для мене було setsebool -P httpd_read_user_content 1. Я сподіваюся, що це допоможе комусь із цим питанням.


У нас була така ж проблема з CentOS 7 і SELinux. Ми виправили це за допомогою chconзміни контексту .soфайлу проблеми на httpd_sys_script_exec_t .
Джон

1

Безліч відповідей дає зрозуміти; це загальна помилка, яка може мати декілька першопричин, типово пов'язаних із завантаженням Apache / WSGI.

Усі ці відповіді на цій сторінці повинні функціонувати як своєрідний контрольний список, і в цьому ключі я хочу додати першопричину мого примірника цієї помилки: невдало додати файл "import os" у файл settings.py.

Зокрема, в нашій команді був розробник, який мав намір видалити непотрібний пакунок, а замість цього видалив "імпортувати ОС" зверху файлу production settings.py. Після перезапуску apache наша програма не перезапуститься, і ми отримали жахливу помилку "RuntimeError: populate () is reentrant".

Швидкий "python Manag.py check" не виявив проблему, але "python settings.py" зробив; пакет os не завантажений.

Якщо у вас виникла помилка, зосередьте свій пошук на перевірці файлів settings.py, а також файлу WSGI.


3
Що ще важливіше, переконайтеся, що ви повертаєтесь до журналу помилок і шукаєте перше повідомлення про помилку, яке виникає після перезавантаження одного з процесів демон Apache або mod_wsgi. Ця перша помилка повідомить вам справжню причину помилки, будь-які запити після цього для того ж самого процесу будуть згадувати reentrantлише про помилку. У демонстраційному режимі також переконайтеся, що ви використовуєте startup-timeoutопцію, якщо у вас є проблема через перехідні помилки, а не помилки кодування. Принаймні таким чином він може автоматично відновитися.
Грем Дамплтон

Це правильна відповідь, помилка загальна, перевірте повідомлення безпосередньо перед початком помилки.
Popieluch

1

RuntimeError: populate() isn't reentrant

Може бути що завгодно, саме тому на це питання існує стільки різних відповідей.

Хитрість полягає в тому, щоб подивитися на повідомлення про помилку безпосередньо перед RuntimeError. У вашому випадку, здається, у файлі /extra/www/htmlquotes/quotes_django/quotespage/admin.py у рядку 15 є помилка синтаксису, див .:

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

Примітка щодо AWS Elastic Beanstalk: За замовчуванням, settings.pyякий пише Django-admin, міститься посилання на локальну базу даних sqlite як джерело даних. Це, ймовірно, буде працювати на вашій локальній ОС, але не на AWS EB, і призведе до populate() isn't reentrantпомилки виконання. Щоб перевірити це, просто прокоментуйте DATABASES={<...>}заяву в settings.py, розгорніть та повторно відкрийте програму.


Це відбувається, наприклад, якщо ви розгортаєтесь до AWS EB з використанням Django версії 2.2 (або пізнішої) з базою даних sqlite за замовчуванням. За вами django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).слідує RuntimeError: populate() isn't reentrant. З документів AWS : "Django 2.2 несумісний з платформою Elastic Beanstalk Python 3.6." (на момент написання)
djvg

0

У мене була ця проблема, і я не міг знайти відповіді, чому я не відмовився від своїх зобов'язань. Мабуть, я додав випадковий імпорт через автоматичне завершення, який накрутив налаштування.

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

У журналі помилок apache: RuntimeError ("populate () не є ретентом")

Він добре працював у моєму середовищі Windows Dev, але не вдався на сервері ubuntu / apache.


0

Я зіткнувся з цією ж помилкою, змінивши порядок цього параметра:

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

повернення його на порядок тут раніше і перезапуск апачі виправили проблему.


0

У моєму випадку я мав custom renderer classдля Django Rest Framework, для певної мети мені довелося перекрити метод класу візуалізації "get_context" (повне розкриття: щоб django toolbarдати правильний кількість запитів SQL)

Я вилучив цей клас і перенавчався. Це спрацювало.


0

У моєму випадку помилка сталася через відсутність необхідного пакета pip.

Так що я зробив pip install -r requirements.txt, перезапустив апаш і все працювало знову.


0

Видаляючи каталог virtualenv, відтворюючи virtualenv, а потім перевстановлюючи всі вимоги, виправлені для мене.


0

Додавання моєї причини до списку. Для мене це було тому, що у мене була служба django, названа з тим самим каталогом, що і каталог технологій. Перейменування процесу / dir вирішило проблему.


0

У мене була рекурсивна django.setup(), наприклад, я намагався записати django.setup()внутрішню app/models.pyантену, у сліді стека django намагався вказати на це поруч:

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

так що так, не забудьте не намагатися налаштувати django під час налаштування django ...


0

Перезапуск сервера Apache для мене вирішив проблему. Це можна зробити, скориставшись командою $ sudo service apache2 restart


0

У мене був цей самий випуск, що для мене працювало, коментуючи налаштування бази даних за замовчуванням у / settings.py. Я також читав, що пізніші версії django не сумісні з ebs


0

Для мене помилка була відсутнім mysqlclientпакетом у файлі вимог.txt.

Спочатку я встановив mysqlclientпакет із:

pip install mysqlclient

потім я оновив файл вимоги.txt за допомогою:

pip freeze > requirements.txt

і це вирішило мою проблему.



-1

Щоб скинути мої 2 євро центи:

Я відтворив робочу програму в Докері. Не вдалося виконати нову установку Docker

populate isn't reentrant

що, здається, є загальною помилкою. У моєму випадку я це не помітив

pip install Django

встановлює останню версію ( 2.0) замість необхідної версії 1.11. Змінивши це на

pip install Django==1.11

виправили мою проблему.


-1

Я думаю, що це загальна помилка, коли щось не так settings.py. Іноді я можу знайти проблему шляхом проб і помилок, видаляючи встановлені додатки по одному. У деяких випадках це не пов’язано з встановленими програмами. Але з мого досвіду, у всіх випадках це проблема у settings.pyфайлі.


-1

перевірте, чи згадували ви свої імена api двічі у розділі встановленого додатка settings.py.

Визначення програми

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

Визначення програми

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

Видалення повторюваних записів вирішило мою проблему


але підручник говорить INSTALLED_APPS = ['allauth', 'allauth.account', 'allauth.socialaccount',]
ming

@ming Це необов’язково.
Swati Srivastava
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.