Подтвердить что ты не робот

Django перестает работать с RuntimeError: populate() не является повторным

Я разрабатываю веб-приложение Django, развернутое на сервере Apache с WSGI, и все идет гладко. Сегодня я внес некоторые незначительные изменения в мое приложение admin.py, пытаясь настроить встроенный интерфейс Django Admin, и изначально сделал синтаксическую ошибку (закрытая скобка). Это означало, что когда я коснулся 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.

4b9b3361

Ответ 1

Мой администратор сервера перезапустил 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"]

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

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

Ответ 2

Я знаю, что это старый ответ, но я буду вносить свой вклад в мое решение:

В качестве способа диагностики источника проблемы запустите manage.py check и посмотрите, найдёте ли что-нибудь там

В моем случае устаревшее требование было проблемой, и django не смог импортировать подмодуль

Убедитесь, что ваши требования обновлены

Ответ 3

Это вызвано ошибкой в ваших настройках Django где-то. К сожалению, Django скрывает ошибку за этим общим и бесполезным сообщением об ошибке.

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

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

с:

self.app_configs = {}

Это позволит Django продолжить загрузку и выявить фактическую ошибку.

Я столкнулся с этой ошибкой по нескольким причинам. Однажды, потому что у меня был плохой импорт в одном из моих приложений admin.py.

Ответ 4

Если вы получаете эту ошибку при использовании 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").

Ответ 5

Это не ответ, а отражение.

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

У меня есть два действия, чтобы исправить это: перезапустить apache или исправить ошибку, которая обработала первую ошибку 5OO.

Попробуйте перезапустить apache с помощью:

sudo service httpd restart

Я надеюсь, что это поможет вам.

Ответ 6

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

$ touch settings.py

Я тоже не правильно решил это, но больше информации в моем вопросе здесь: Мониторинг смены кода не работает с Django 1.7 на mod-wsgi

Ответ 7

У меня возникла та же проблема, и источником ошибки для меня была просто синтаксическая ошибка в файле, с которым я работал. После исправления опечатки в populate() is not reentrant ошибка populate() is not reentrant исчезла.

Если вы запускаете django из скрипта wsgi, вы можете определить опечатку, просто запустив скрипт wsgi из командной строки. Например:

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

Ответ 8

Это выглядит как хорошая коллекция действительных ответов для одной и той же ошибки Apache mod-wsgi, каждый парень публикует ту, которая работает для него/нее, поэтому вот моя:

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

Ответ 10

Эта ошибка также генерируется при несовместимости использования пробела и табуляции в коде.

Ответ 11

Я столкнулся с одной и той же проблемой, поэтому начал оглядываться.

Теперь у меня это работает, поэтому я решил поделиться с вами ребятами!

Все, что я сделал, это сделать chown user:group /to/path -R и chmod 770 /to/path -R снова и снова.

Ответ 12

Это также может быть вызвано дублированием записи в INSTALLED_APPS

Ответ 13

Настройка: Ubuntu 14.04, Django 1.10, Python 3.5 (в 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'

Ответ 14

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

Ответ 15

Множество ответов проясняет это; Это общая ошибка, которая может иметь несколько основных причин, обычно связанных с загрузкой Apache/WSGI.

Все эти ответы на этой странице должны быть своего рода контрольным списком, и в этом ключе я хочу добавить основную причину моего экземпляра этой ошибки: не удалось добавить "import os" в ваш файл settings.py.

В частности, в нашей команде был разработчик, который намеревался удалить ненужный пакет, а вместо этого удалил "import os" из верхней части рабочего файла settings.py. После перезапуска Apache наше приложение не перезапустилось, и мы получили страшную ошибку "RuntimeError: populate() not reentrant".

Быстрая проверка python manage.py не выявила проблему, но появилась python settings.py; пакет ОС не был загружен.

Если у вас есть эта ошибка, сфокусируйте свой поиск на проверке ваших файлов settings.py, а также файла WSGI.

Ответ 16

У меня была эта проблема, и я не мог найти ответ, почему, пока я не отменил свои обязательства. По-видимому, я добавил случайный импорт из-за автозаполнения, который прикрутил настройку.

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

В журнале ошибок apache: RuntimeError ( "populate() не является реентерабельным" )

Он отлично работал в моей среде Windows, но не удался на сервере ubuntu/apache.

Ответ 17

Я входил в эту же ошибку после изменения порядка этого параметра:

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

вернув его в порядке, описанном выше, и перезапустив apache, исправил проблему.

Ответ 18

В моем случае у меня был custom renderer class для Django Rest Framework, для какой-то цели мне пришлось переопределить метод класса renderer "get_context" (полное раскрытие: сделать django toolbar корректным подсчет запросов SQL)

Я удалил этот класс и перераспределил его. Это сработало.

Ответ 19

В моем случае ошибка возникла из-за отсутствия требуемого пакета pip.

Итак, я сделал pip install -r requirements.txt, перезапустил apache и все снова работало.

Ответ 20

Удаление каталога virtualenv, воссоздание virtualenv, а затем переустановка всех требований устранили его для меня.

Ответ 21

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

Ответ 22

Добавляю мою причину в список. Для меня это было потому, что у меня был сервис django с тем же каталогом, что и каталог процесса. Переименование процесса /dir устранило проблему.

Ответ 23

У меня был рекурсивный 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...

Ответ 24

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

Ответ 25

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

Ответ 26

У меня была такая же проблема, что помогло мне закомментировать настройки базы данных по умолчанию в /settings.py. Я также читал, что более поздние версии Django не совместимы с EBS

Ответ 27

В моем случае у меня был циклический импорт, который вызывает ошибку, которая разрушает метод заполнения.

Ответ 28

Я решил проблему с добавлением __init__.py в папку моих приложений.

touch /mainprojectfolder/projectfolderwhichcontainswsgi.py/apps/__init__.py

Тогда это сработало!

Ответ 29

Чтобы добавить 2 евро цента:

Я воссоздал рабочую настройку в Docker. Новая настройка Docker не удалась с

populate isn't reentrant

которая кажется общей ошибкой. В моем случае я упустил из виду, что

pip install Django

устанавливает последнюю версию (2.0) вместо требуемой версии 1.11. Меняя это на

pip install Django==1.11

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

Ответ 30

Я думаю, что это общая ошибка, когда что-то не так с settings.py. Иногда я могу найти проблему методом проб и ошибок, удаляя установленные приложения по одному. В некоторых случаях это не относится к установленным приложениям. Но по моему опыту, во всех случаях это проблема в файле settings.py.