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

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
4b9b3361

Ответ 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