AttributeError: модуль 'signal' не имеет атрибута 'SIGHUP'

Я пытаюсь интегрировать mod_wsgi в мой проект django на Windows 10. Хотя мне удалось установить mod_wsgi в виртуальную среду, я сталкиваюсь с ошибками при выполнении команды python manage.py runmodwsgi.

(venv) PS D:\Tutorials\Python\Projects\ADSS> python manage.py runmodwsgi
Successfully ran command.
Server URL         : http://localhost:8000/
Server Root        : C:/Users/admin/AppData/Local/Temp/mod_wsgi-localhost-8000-admin
Server Conf        : C:/Users/admin/AppData/Local/Temp/mod_wsgi-localhost-8000-admin/httpd.conf
Error Log File     : C:/Users/admin/AppData/Local/Temp/mod_wsgi-localhost-8000-admin/error_log (warn)
Operating Mode     : daemon
Request Capacity   : 5 (1 process * 5 threads)
Request Timeout    : 60 (seconds)
Startup Timeout    : 15 (seconds)
Queue Backlog      : 100 (connections)
Queue Timeout      : 45 (seconds)
Server Capacity    : 20 (event/worker), 20 (prefork)
Server Backlog     : 500 (connections)
Locale Setting     : en_US.cp1252
Traceback (most recent call last):
  File "D:\Tutorials\Python\Projects\ADSS\manage.py", line 25, in <module>
    execute_from_command_line(sys.argv)
  File "D:\Tutorials\Python\Projects\ADSS\venv\lib\site-packages\django\core\management\__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "D:\Tutorials\Python\Projects\ADSS\venv\lib\site-packages\django\core\management\__init__.py", line 440, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "D:\Tutorials\Python\Projects\ADSS\venv\lib\site-packages\django\core\management\base.py", line 402, in run_from_argv
    self.execute(*args, **cmd_options)
  File "D:\Tutorials\Python\Projects\ADSS\venv\lib\site-packages\django\core\management\base.py", line 448, in execute
    output = self.handle(*args, **options)
  File "D:\Tutorials\Python\Projects\ADSS\venv\lib\site-packages\mod_wsgi\server\management\commands\runmodwsgi.py", line 162, in handle
    signal.signal(signal.SIGHUP, handler)
AttributeError: module 'signal' has no attribute 'SIGHUP'

Google предполагает, что signal.SIGHUP, signal.SIGUSR1 и signal.SIGWINCH, используемые моей установкой mod_wsgi, не поддерживаются в Windows. Поэтому я попробовал следующие два метода в .\venv\Lib\site-packages\mod_wsgi\server\management\commands\runmodwsgi.py:

  1. Я попробовал использовать условие if if platform.system() != 'Linux':, как было предложено в этом Q&A,
  2. .
  3. Я также попробовал закомментировать строки, использующие эти сигналы в этом файле.

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

Я следовал инструкциям, написанным в PyPi листинге mod_wsgi. Я пишу их здесь для справки:

  1. Получил копию Apache 2.4.54 Win64 с сайта https://www.apachelounge.com/download/
  2. .
  3. Извлек этот zip файл и поместил папку Apache24 в папку C: как C:\Apache24.
  4. Установил Define SRVROOT "c:/Apache24" и Listen 8000 в httpd.conf. Убедитесь, что все работает и загружается домашняя страница по умолчанию (http://localhost:8000).
  5. .
  6. Установил инструменты сборки Visual Studio C++ с помощью Visual Studio Installer (категория 'Desktop development with C++').enter image description here
  7. .
  8. Установил mod_wsgi в мою виртуальную среду, выполнив команду pip install mod-wsgi в моей активной виртуальной среде в окне x64 Native Tools Command Prompt for VC2022.
  9. Добавил 'mod_wsgi.server', в список INSTALLED_APPS в моей settings.py.
  10. Ран python manage.py collectstatic
  11. Ran mod_wsgi-express module-config, который вывел следующие три строки, которые я поместил в конец моего httpd.conf:
LoadFile "C:/Program Files/Python310/python310.dll"
LoadModule wsgi_module "D:/Tutorials/Python/Projects/ADSS/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win_amd64.pyd"
WSGIPythonHome "D:/Tutorials/Python/Projects/ADSS/venv"
  1. Ran python manage.py runmodwsgi, что приводит к журналу ошибок, о котором я упоминал в начале своего поста.

Пожалуйста, пролейте свет на то, что я могу делать неправильно.

У меня также установлена Visual Studio, которую я использую для этого проекта.

Я изменил порт 80 на порт 8000 в httpd.conf, потому что мой IIS не позволяет Apache работать на порту 80.

Хорошо. Я нашел обходной путь, который работает. Вместо того, чтобы полагаться на встроенный в mod_wsgi скрипт администратора, который запускается командой python manage.py runmodwsgi, я последовал методу Джоннибойкуртиса, как объясняется в его видео здесь.

Метод Джонни Бойкуртиса по развертыванию приложения django на Apache в среде Windows работал прямо из коробки. Однако, apache не обслуживал статические файлы, хотя я следовал инструкциям согласно документации django здесь.

Итак, для обслуживания статических файлов я установил WhiteNoise. Теперь, похоже, все работает нормально.

Вернуться на верх