Django populate() не является повторным
Я продолжаю получать это, когда пытаюсь загрузить приложение Django на производство. Я попробовал все ответы на stackoverflow, но ничего не исправил. Любые другие идеи. (Я использую Django 1.5.2 и Apache)
Traceback (most recent call last):
File "/var/www/thehomeboard/wwwhome/wsgi.py", line 37, in <module>
application = get_wsgi_application()
File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 14, in get_wsgi_application
django.setup()
File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 78, in populate
raise RuntimeError("populate() isn't reentrant")
RuntimeError: populate() isn't reentrant
Ответы
Ответ 1
В конце концов, проблема была в том, что я попытался запустить второе приложение Django и не имел следующего в моей конфигурации apache:
WSGIDaemonProcess ...
WSGIProcessGroup ...
Только что узнал, что вы можете запустить одно приложение django, не определяя его, но когда его два порождают конфликт.
Ответ 2
Этот RuntimeError впервые появился для меня после перехода на Django 1.7 (и все еще присутствует с Django 1.8). Обычно это вызвано приложением Django, которое вызывает ошибку, но эта ошибка каким-то образом проглатывается.
Вот обходной путь, который работает для меня. Добавьте его в свой wsgi.py, и реальная ошибка должна быть зарегистрирована:
import os
import time
import traceback
import signal
import sys
from django.core.wsgi import get_wsgi_application
try:
application = get_wsgi_application()
print 'WSGI without exception'
except Exception:
print 'handling WSGI exception'
# Error loading applications
if 'mod_wsgi' in sys.modules:
traceback.print_exc()
os.kill(os.getpid(), signal.SIGINT)
time.sleep(2.5)
Подробнее см. этот поток в modwsgi.
Ответ 3
Причиной возникновения ошибки populate() isn't reentrant
будет множество причин. Если вы посмотрите на registry.py
в своем приложении django, вероятно, внутри этого каталога
/python2.7/site-packages/django/apps
# app_config should be pristine, otherwise the code below won't
# guarantee that the order matches the order in INSTALLED_APPS.
if self.app_configs:
raise RuntimeError("populate() isn't reentrant")
Как вы видите в комментарии, он говорит, что app_config должен быть чистым. Это означает, что если одна из конфигураций неверна или требуется, чтобы библиотека отсутствовала, она увеличит эту заселенную ошибку. Я получил эту ошибку, потому что я пропустил установку sqlite. Даже если вы видите, что в исключении не упоминаются возможные причины. Я установил sqlite с помощью этой команды на debian
pip install pysqlite
Он решил мою проблему. Мое исключение из-за отсутствия pysqlite. Возможно, вам не хватает других необходимых пакетов или ошибок в вашем settings.py