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
:
- Я попробовал использовать условие if
if platform.system() != 'Linux':
, как было предложено в этом Q&A, .
- Я также попробовал закомментировать строки, использующие эти сигналы в этом файле.
В любом случае, я постоянно натыкался на ту или иную ошибку, что заставляло меня задуматься, правильна ли вообще моя установка mod_wsgi.
Я следовал инструкциям, написанным в PyPi листинге mod_wsgi. Я пишу их здесь для справки:
- Получил копию Apache 2.4.54 Win64 с сайта https://www.apachelounge.com/download/ .
- Извлек этот zip файл и поместил папку Apache24 в папку C: как
C:\Apache24
. - Установил
Define SRVROOT "c:/Apache24"
иListen 8000
вhttpd.conf
. Убедитесь, что все работает и загружается домашняя страница по умолчанию (http://localhost:8000). .
- Установил инструменты сборки Visual Studio C++ с помощью Visual Studio Installer (категория 'Desktop development with C++'). .
- Установил mod_wsgi в мою виртуальную среду, выполнив команду
pip install mod-wsgi
в моей активной виртуальной среде в окнеx64 Native Tools Command Prompt for VC2022
. - Добавил
'mod_wsgi.server',
в списокINSTALLED_APPS
в моейsettings.py
. - Ран
python manage.py collectstatic
- 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"
- 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. Теперь, похоже, все работает нормально.