#python #django #apache
#питон #django #апач
Вопрос:
У меня есть приложение Django, которое развертывается в локальной сети с использованием Apache mod_wsgi под Windows. Когда я бегу python manage.py runserver
, все работает нормально. Но когда я запускаю службу Apache, я не могу получить доступ к приложению. Единственный ответ, который я получаю от access.журнал — это код ошибки 408
. Ниже приведен мой httpd.conf
:
LoadFile "c:/users/felix/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/felix/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/users/felix/appdata/local/programs/python/python37"
ServerName localhost
WSGIScriptAlias / "D:/dev/test_server/django/django/wsgi_windows.py"
Listen 8000
<VirtualHost *:8000>
WSGIPassAuthorization On
ErrorLog "logs/django.error.log"
CustomLog "logs/django.access.log" combined
Alias /static "D:/dev/test_server/staticfiles"
<Directory "D:/dev/test_server/staticfiles">
Require all granted
</Directory>
<Directory "D:/dev/test_server/django/django">
<Files wsgi_windows.py>
Require all granted
</Files>
</Directory>
<Directory />
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
А ниже приведен wsgi_windows.py
файл:
# Activate the virtualenv
activate_this = 'D:/dev/test_server/.venv/Scripts/activate_this.py'
exec(open(activate_this).read(), dict(__file__=activate_this))
import os # noqa
import sys # noqa
import site # noqa
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('D:/dev/test_server/.venv/Lib/site-packages')
# Add the app's directory to the PYTHONPATH
sys.path.append('D:/dev/test_server/django')
sys.path.append('D:/dev/test_server/django/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'django.settings'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django.settings")
from django.core.wsgi import get_wsgi_application # noqa
application = get_wsgi_application()
Я был бы признателен за любые идеи или намеки по этому вопросу.
Комментарии:
1. Лучше всего начать с проверки файлов журнала apache, чтобы убедиться, что запрашиваемый вами URL-адрес присутствует в ur urls.py и вы можете получить к нему доступ через локальный запуск (runserver) Удачи
2. @octopus Команда
python manage.py runserver
работает просто отлично. Каждый URL-адрес работает. Файлы журналов в Apache не дают никакой дополнительной информации, кроме408
кода.
Ответ №1:
- запустите apache в командной строке с помощью «httpd» и найдите сообщения об ошибках. Если у Apache возникает проблема при запуске, в файлах журнала нет сообщения.
- проверьте error.log Вы можете поместить ‘print(‘xyz’) даже в settings.py и в другом месте, и таким образом, проверив error.log, посмотрите, как настроено ваше приложение и как далеко обрабатывается запрос. Если ваше приложение застряло где-то вроде этого, вы найдете код, в котором оно застряло
Комментарии:
1. Что ж, спасибо за подсказку. Забавно, что в лог-файлах нет сообщений, если у Apache возникла проблема. Но да, я поместил
2. Итак, Apache запущен, и ваши настройки приложения django запущены, а 408 означает тайм-аут, поэтому ваше приложение не возвращается в течение тайм-аута Apache. Пожалуйста, проверьте в httpd.conf, если тайм-аут случайно короткий (извините, я не знаю значение по умолчанию … google или установите высокое значение для тестирования. Пожалуйста, в вашем settings.py поставьте DEBUG=True и вызовите свою страницу. Ошибки? Пожалуйста, напишите urls.py settings.py и views.py
3. Здравствуйте, так получилось, что у Apache возникла проблема с текущей версией numpy. Я не совсем понимаю, почему у него есть проблема, поскольку запуск
python manage.py runserver
не приводит к ошибкам. Но да, в настоящее время установка numpy 1.16.0 делает свое дело. Еще раз спасибо.
Ответ №2:
У меня такая же ошибка после установки библиотеки scipy и использования ее в некотором скрипте в django. Я обнаружил, что некоторые библиотеки, такие как «numpy» и «scipy», работают только в главном интерпретаторе Python, и вам нужно заставить WSGI запускаться в глобальной группе приложений, чтобы запустить его. Добавление этой строки в мой файл conf работает для меня.
WSGIApplicationGroup %{GLOBAL}
Комментарии:
1. это сработало для меня — большое вам спасибо