Я разрабатываю веб-приложение 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.
Мой администратор сервера перезапустил 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.
Я знаю, что это старый ответ, но я буду вносить свой вклад в мое решение:
В качестве способа диагностики источника проблемы запустите manage.py check
и посмотрите, найдёте ли что-нибудь там
В моем случае устаревшее требование было проблемой, и django не смог импортировать подмодуль
Убедитесь, что ваши требования обновлены
manage.py check
я обнаружил проблему. Спасибо.
Если вы получаете эту ошибку при использовании 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")
.
Возможно, вы сможете исправить это, не перезапуская Apache, коснувшись файла (кроме wsgi.py), который находится на ранней стадии процесса загрузки. Например, ваш файл настроек:
$ touch settings.py
Я тоже не правильно решил это, но больше информации в моем вопросе здесь: Мониторинг смены кода не работает с Django 1.7 на mod-wsgi
Это не ответ, а рефлексия.
Когда вы обновляетесь до django 1.7 и у вас появляется ошибка 500 и вы перезагружаете страницу, Apache говорит: "populate() не реентерабелен". Я думаю, что когда вы загружаете свою страницу, Apache загружает все модули, которые вам нужны для вашего приложения, и когда ошибка обрабатывается, он не выгружает модуль. Итак, когда вы перезагружаете свою страницу, apache загружает снова эти модули, но он уже загружен. Итак, apache говорит: "populate() не является повторно входящим".
У меня есть два действия, чтобы исправить это: перезапустить apache или исправить ошибку, которая обработала первую ошибку 5OO.
Я надеюсь, что это поможет вам.
Apache хранит файл wsgi в кеше. Отключить кеширование Apache файлов python
Итак, сначала удалите файл wsgi и перезагрузите acpache, а затем снова добавьте wsgi файл и перезапустите apache.
Это выглядит как хорошая коллекция действительных ответов для одной и той же ошибки Apache mod-wsgi, каждый парень публикует ту, которая работает для него/нее, поэтому вот моя:
Не забудьте обновить требования к проекту после развертывания:)
У меня возникла та же проблема, и источником ошибки для меня была просто синтаксическая ошибка в файле, с которым я работал. После исправления опечатки в populate() is not reentrant
ошибка populate() is not reentrant
исчезла.
Если вы запускаете django из скрипта wsgi, вы можете определить опечатку, просто запустив скрипт wsgi из командной строки. Например:
cd /usr/local/www/wsgi-scripts/
python djangolauncher.wsgi
Я знаю, что прошло некоторое время с тех пор, как был задан этот вопрос, но я просто столкнулся с этой проблемой из-за проблемы, которую я не видел здесь. Я получил ошибку RuntimeError: populate() isn't reentrant
из-за SELinux на CentOS 7. Я использовал Django из домашнего каталога, и мне просто пришлось включить SELinux boolean, что позволило читать домашние каталоги, поскольку ошибка populate() была вызвана разрешений. Решение для меня было setsebool -P httpd_read_user_content 1
. Надеюсь, это поможет кому-то, кто имеет эту проблему.
chcon
чтобы изменить контекст .so
файла проблемы на httpd_sys_script_exec_t
.
Настройка: 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'
Я столкнулся с одной и той же проблемой, поэтому начал оглядываться.
Теперь у меня это работает, поэтому я решил поделиться с вами ребятами!
Все, что я сделал, это сделать chown user:group /to/path -R
и chmod 770 /to/path -R
снова и снова.
Множество ответов проясняет это; Это общая ошибка, которая может иметь несколько основных причин, обычно связанных с загрузкой Apache/WSGI.
Все эти ответы на этой странице должны быть своего рода контрольным списком, и в этом ключе я хочу добавить основную причину моего экземпляра этой ошибки: не удалось добавить "import os" в ваш файл settings.py.
В частности, в нашей команде был разработчик, который намеревался удалить ненужный пакет, а вместо этого удалил "import os" из верхней части рабочего файла settings.py. После перезапуска Apache наше приложение не перезапустилось, и мы получили страшную ошибку "RuntimeError: populate() not reentrant".
Быстрая проверка python manage.py не выявила проблему, но появилась python settings.py; пакет ОС не был загружен.
Если у вас есть эта ошибка, сфокусируйте свой поиск на проверке ваших файлов settings.py, а также файла WSGI.
reentrant
ошибку. В режиме демона также убедитесь, что вы используете опцию времени startup-timeout
если у вас есть эта проблема из-за временных ошибок, а не ошибок кодирования. По крайней мере, таким образом он может автоматически восстановиться.
В моем случае ошибка возникла из-за отсутствия требуемого пакета pip.
Итак, я сделал pip install -r requirements.txt
, перезапустил apache и все снова работало.
В моем случае у меня был custom renderer class
для Django Rest Framework
, для какой-то цели мне пришлось переопределить метод класса renderer "get_context" (полное раскрытие: сделать django toolbar
корректным подсчет запросов SQL)
Я удалил этот класс и перераспределил его. Это сработало.
Это также может быть вызвано дублированием записи в INSTALLED_APPS
Я входил в эту же ошибку после изменения порядка этого параметра:
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, исправил проблему.
У меня была эта проблема, и я не мог найти ответ, почему, пока я не отменил свои обязательства. По-видимому, я добавил случайный импорт из-за автозаполнения, который прикрутил настройку.
# found in models.py
from msilib.schema import SelfReg
В журнале ошибок apache: RuntimeError ( "populate() не является реентерабельным" )
Он отлично работал в моей среде Windows, но не удался на сервере ubuntu/apache.
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
Эта ошибка также генерируется при несовместимости использования пробела и табуляции в коде.
Я думаю, что это общая ошибка, когда что-то не так с settings.py
. Иногда я могу найти проблему методом проб и ошибок, удаляя установленные приложения по одному. В некоторых случаях это не относится к установленным приложениям. Но по моему опыту, во всех случаях это проблема в файле settings.py
.
Удаление каталога virtualenv, воссоздание virtualenv, а затем переустановка всех требований устранили его для меня.
Я решил проблему с добавлением __init__.py
в папку моих приложений.
touch /mainprojectfolder/projectfolderwhichcontainswsgi.py/apps/__init__.py
Тогда это сработало!
В моем случае у меня был циклический импорт, который вызывает ошибку, которая разрушает метод заполнения.
Я не решаюсь добавить это как ответ, так как на самом деле это просто описание соответствующего случая. Тем не менее, это не казалось разборчивым в качестве комментария.
Я столкнулся с этой ошибкой при создании функции, которая могла бы получить доступ к базе данных Django без запуска сервера. В основном это использовалось для вставки записей тестовых данных.
У моего проекта в файле project/apps/app_one/functions.py
:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Project.settings")
import django
django.setup()
Это позволяет получить доступ к базе данных Django через скрипты Python без запуска сервера. Смотрите здесь для получения дополнительной информации об этом подходе: https://stackoverflow.com/questions/8047204/django-script-to-access-model-objects-without-using-manage-py-shell
В этом файле я также держал основные функции приложения, которые не требовали доступа к базе данных и должны были использоваться во время работы сервера. Например, в моем app_one.models.py
меня может быть следующее использование functions.arg_format
functions.arg_format, импортированной из файла app_name/functions.py
:
def save(self, *args, **kwargs):
self.some_arg = functions.arg_format(self.some_arg)
super().save(*args, **kwargs)
Это означает, что мое приложение во время работы пыталось снова запустить программу setup()
Django setup()
.
Я не знаю, как это связано, но он RuntimeError: populate() isn't reentrant
ту же RuntimeError: populate() isn't reentrant
ошибкой, пока я не создал отдельный файл для всех функций доступа к базе данных. После того, как дополнительный импорт setup()
был отменен, миграция могла быть завершена, как и ожидалось.
проверьте, упоминали ли вы свои имена API дважды в разделе установленного приложения settings.py.
Определение приложения
INSTALLED_APPS = [
...
'rest_framework',
'myapp_api',
'myapp_api.apps.myappWebserviceApiConfig',
]
Определение приложения
INSTALLED_APPS = [
...
'rest_framework',
'myapp_api.apps.myappWebserviceApiConfig',
]
Удаление повторяющихся записей решило мою проблему
Недавно у меня была такая же ошибка в моем проекте django [Django1.11].
Проблема заключалась в том, что мои приложения больше не живут в нестандартном месте django, обычно приложения живут в корневом каталоге проекта.
Я недавно переместил свои приложения в папку приложений для целей регистрации, но забыл обновить свои шаблоны.
Моя структура [./awesome_potatoes/apps/first_app/]
Поэтому, когда я запускаю новое приложение, происходит следующее: django не добавляет имя dir в файл apps.py или в любой файл python в этом отношении из-за устаревшего шаблона.
apps.py
name = 'first_app'
Исправить [после обновления моих шаблонов]
name = 'apps.first_app'
Чтобы добавить 2 евро цента:
Я воссоздал рабочую настройку в Docker. Новая настройка Docker не удалась с
populate isn't reentrant
которая кажется общей ошибкой. В моем случае я упустил из виду, что
pip install Django
устанавливает последнюю версию (2.0
) вместо требуемой версии 1.11
. Меняя это на
pip install Django==1.11
исправил мою проблему.
wsgi.py
приводит к той же ошибке Apache, и файлы .pyc не воссоздаются.