Добавление нового приложения в приложение, установленное на django, приводит к ошибке populate (), не реентерабельной для IIS - PullRequest
0 голосов
/ 01 марта 2019

Прежде всего, я видел все потоки SO, связанные с проблемой error populate() isn't reentrant, но проблема, с которой я сталкиваюсь, отличается среди них.

Вещи, которые я хочу очистить в первую очередь:

  1. Мое приложение Django отлично работает на IIS Server , только мое приложение зарегистрировано в INSTALLED_APPS в settings.py проекта.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

'MyDjangoWebApp.app',]
Когда я добавляю новое приложение в мой INSTALLED_APPS в settings.py проекта, оно отлично работает в Django Локальный сервер (например, сервер, созданный и размещенный на Pycharm)
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

'Busisoft_Document_Extraction_Web.app',
// Newly added app which I installed through PIP
'widget_tweaks']

3. Но когда я размещаю один и тот же проект с IIS-сервера , он дает мне

Error occurred while reading WSGI handler:
Traceback (most recent call last):
File "c:\server\MyDjangoWebApp\wfastcgi.py", line 791, in main
env, handler = read_wsgi_handler(response.physical_path)
File "c:\server\MyDjangoWebApp\wfastcgi.py", line 633, in 
read_wsgi_handler
handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
File "c:\server\MyDjangoWebApp\wfastcgi.py", line 605, in 
get_wsgi_handler
handler = handler()
File "c:\server\MyDjangoWebApp\venv\lib\site- 
packages\django\core\wsgi.py", line 12, in get_wsgi_application
django.setup(set_prefix=False)
File "c:\server\MyDjangoWebApp\venv\lib\site- 
packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "c:\server\MyDjangoWebApp\venv\lib\site- 
packages\django\apps\registry.py", line 81, in populate
raise RuntimeError("populate() isn't reentrant")
RuntimeError: populate() isn't reentrant

StdOut: 

StdErr:

Интересно, что если яудалить это дополнительное приложение IIS работает отлично.

My web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <handlers>
        <add name="DjangoIISHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="c:\server\MyDjangoWebApp\venv\Scripts\python.exe|c:\server\MyDjangoWebApp\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
</system.webServer>
<appSettings>
  <add key="PYTHONPATH" value="c:\server\MyDjangoWebApp" />
  <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
  <add key="WSGI_LOG" value="c:\server\MyDjangoWebApp\wfastcgi.log" />
  <add key="DJANGO_SETTINGS_MODULE" value="Busisoft_Document_Extraction_Web.settings" />
  <add key="WSGI_RESTART_FILE_REGEX" value=".*((\.py)|(\.config))$" />
</appSettings>

My System Configuration

  1. Windows 10
  2. IIS Server 10
  3. Python 3.5 (32-разрядный)
  4. Django 2.1.7

1 Ответ

0 голосов
/ 01 марта 2019

У меня была похожая проблема в прошлом, и она была на сервере Ubuntu.Пожалуйста, проверьте ваш импорт в файле просмотра.Если импорт является относительным импортом (то есть из .models import MyModel), добавьте следующую строку вверху вашего файла.

from __future__ import absolute_import

Удалите pycache и перезапустите службу.

...