Django - отличить сервер разработки (manage.py runserver) от обычного (например, Apache)
Мне нужен способ отличить сервер разработки в Django (например, запустить./manage.py runserver 0.0.0.0:8000
) из того, что запускается на Apache. В случае Apache я использую режим демона WSGI, но я хотел бы найти более надежное решение для обнаружения выполнения на сервере разработки Django.
То, что я сейчас использую, похоже на:
wsgi_wrapper = request.META.get('wsgi.file_wrapper')
wsgi_wrapper_path = wsgi_wrapper.__module__ if wsgi_wrapper else None
который, похоже, дает wsgi_wrapper_path
хранение:
- "
wsgiref.util
"строка при запуске на встроенном сервере разработки Django, None
при запуске на Apache / WSGI в режиме демона,
Проблема здесь в том, что я не уверен, могу ли я положиться на эту проверку (например, если сервер производства / промежуточной разработки / разработки или конфигурация моего локального хоста изменились). Я не смог найти никаких документов, касающихся этого.
Мне нужна эта проверка в первую очередь из-за одной проблемы с сервером разработки Django: она устанавливает запрос CONTENT_TYPE
(request.META['CONTENT_TYPE']
) к "text/plain
msgstr "даже если для самого HTTP-запроса не задан тип содержимого (например, GET
запрос).
Будем благодарны за любые идеи, касающиеся обнаружения сервера разработки Django (или решения проблемы с неверным типом содержимого запроса). Благодарю.
Ps. Я в основном задаю этот вопрос: как я могу определить, запущено ли мое приложение Django на сервере разработки или нет? для Django 1.4, пытаясь определить решение, которое будет достаточно надежным в случае изменения конфигурации.
1 ответ
Как правило - при использовании серверов Production и Dev они должны иметь разные конфигурации - чаще всего они будут использовать разные базы данных, разные почтовые настройки и т. Д. Поэтому наилучшим местом для определения типа сервера является конфигурация. Я могу указать на два наиболее часто используемых подхода:
- Конфиг файл
тогда в settings.py просто добавьте:
server = config.get("SERVER_TYPE", "DEV")
и иметь SERVER_TYPE только в файле конфигурации на PRODUCTION
- Среда
Установите SERVER_TYPE в качестве переменной среды при запуске веб-сервера. Т.е. для Supervisord, работающего на веб-сервере:
environment=SERVER_TYPE=PROD
или для Apache:
SetEnv SERVER_TYPE PROD
Таким образом, вы будете уверены, что пока вы не смешаете файлы конфигурации, вы всегда получите реальный тип сервера, независимо от того, как вы его запустите. По крайней мере, поэтому файлы конфигурации используются для.