Wsgi что это
Перейти к содержимому

Wsgi что это

Как развертывать с помощью WSGI¶

Основной платформой для развертывания Django является WSGI, стандарт Python для веб-серверов и приложений.

Команда управления Django startproject устанавливает для вас минимальную конфигурацию WSGI по умолчанию, которую вы можете настроить по мере необходимости для вашего проекта и направить на использование любого WSGI-совместимого сервера приложений.

Django включает документацию по началу работы для следующих серверов WSGI:

Объект application ¶

Ключевой концепцией развертывания с помощью WSGI является вызываемый объект application , который сервер приложений использует для взаимодействия с вашим кодом. Обычно он предоставляется в виде объекта с именем application в модуле Python, доступном серверу.

Команда startproject создает файл <project_name>/wsgi.py , содержащий такой application вызываемый файл.

Он используется как на сервере разработки Django, так и в производственных развертываниях WSGI.

Серверы WSGI получают путь к вызываемой переменной application из своей конфигурации. Встроенный сервер Django, а именно команда runserver , считывает его из настройки WSGI_APPLICATION . По умолчанию он установлен в <project_name>.wsgi.application , который указывает на вызываемую переменную application в <project_name>/wsgi.py .

Конфигурирование модуля настроек¶

Когда сервер WSGI загружает ваше приложение, Django должен импортировать модуль настроек — именно там определено все ваше приложение.

Django использует переменную окружения DJANGO_SETTINGS_MODULE для поиска соответствующего модуля настроек. Она должна содержать точечный путь к модулю настроек. Вы можете использовать разные значения для разработки и производства; все зависит от того, как вы организуете свои настройки.

Если эта переменная не установлена, то по умолчанию wsgi.py устанавливает ее в значение mysite.settings , где mysite — имя вашего проекта. Таким образом, runserver по умолчанию обнаруживает файл настроек по умолчанию.

Поскольку переменные окружения относятся ко всему процессу, это не работает, когда вы запускаете несколько сайтов Django в одном процессе. Это происходит с mod_wsgi.

Чтобы избежать этой проблемы, используйте режим демона mod_wsgi с каждым сайтом в собственном процессе демона, или переопределите значение из окружения, обеспечив os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" в вашем wsgi.py .

Применение промежуточного программного обеспечения WSGI¶

Чтобы применить WSGI middleware, вы можете обернуть объект приложения. Например, вы можете добавить эти строки в нижней части wsgi.py :

Вы также можете заменить WSGI-приложение Django на пользовательское WSGI-приложение, которое впоследствии делегируется WSGI-приложению Django, если вы хотите объединить Django-приложение с WSGI-приложением другого фреймворка.

Развёртывание с WSGI¶

Основной платформой для развертывания Django является WSGI, это фактически стандарт для веб-серверов и приложений на Python.

Команда startproject установит простую WSGI конфигурацию по-умолчанию, которую вы можете впоследствии изменить под нужды вашего проекта и использовать с любым WSGI-совместимым веб-сервером.

Django содержит описание работы со следующими WSGI серверами:

Объект application

Одна из ключевых концепций развертывания с WSGI заключается в указании функции, или вызываемого объекта, application , который использует веб-сервер для взаимодействия с вашим кодом. Обычно это объект application модуля Python доступного для сервера.

Команда startproject создаст файл <project_name>/wsgi.py , который содержит вызываемый объект application .

Этот файл использует как встроенным сервером для разработки, так и на боевом WSGI сервере.

WSGI сервер получает путь к объекту application из своих настроек. Встроенный сервер Django, запускаемый командами runserver и runfcgi , использует настройку WSGI_APPLICATION . По умолчанию она равна <project_name>.wsgi.application , и указывает на объект application в <project_name>/wsgi.py .

Конфигурация модуля настроек¶

Когда WSGI сервер загружает ваше приложение, Django необходимо импортировать модуль с настройками.

Django использует переменную окружения DJANGO_SETTINGS_MODULE для определения расположения модуля настроек. Она должна содержать путь для импорта этого модуля. Вы можете использовать разные значения при разработке и на боевом сервере, все зависит от организации настроек в вашем проекте.

Если переменная не определена, wsgi.py использует значение mysite.settings , где mysite название вашего проекта. Вот как runserver определяет расположение файла настроек для вашего проекта.

Так как переменные окружения одни на процесс, такой подход не работает при запуске нескольких Django сайтов в одном процессе, как это работает в mod_wsgi.

Для этого используйте daemon mode mod_wsgi при котором каждый сайт запускается в отдельном процессе, или перезаписывайте переменную окружения os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" в wsgi.py .

Использование WSGI мидлваров¶

Чтобы использовать WSGI middleware можно просто обернуть объект приложения в том же файле. Например, вы можете добавить следующий код в конце wsgi.py :

Также вы можете заменить WSGI-приложение, предоставляемое с Django, если хотите совместить приложения Django с приложениями другого фреймворка.

Некоторые сторонние WSGI middleware не вызывают метод close объекта ответа после обработки запроса — самым извесным является middleware Sentry(до 2.0.7 версии) для обработки ошибок. В таких случаях сигнал request_finished не отсылается. Это может привести к простою подключений к базе данных или серверам memcache.

Как подключить Wsgi Python App приложения на примере Flask

WSGI — стандарт взаимодействия между Python-программой, выполняющейся на стороне сервера и самим веб-сервером, например Apache.

В Python существует большое количество различного рода веб-фреймворков, тулкитов и библиотек. Для каждого из них собственный метод установки и настройки, они не умеют взаимодействовать между собой. Это может стать затруднением для тех, кто только начинает изучать Python, так как, например, выбор определённого фреймворка может ограничить выбор веб-сервера и наоборот.

WSGI предоставляет простой и универсальный интерфейс между большинством веб-серверов и веб-приложениями или фреймворками.

Более подробно http://lectureswww.readthedocs.io/5.web.server/wsgi.html

Полную инструкцию как поставить Django смотрите тут.

Мы попробуем настроить Python для модуля Flask

Для начала установки, войдите в cPanel и найдите ссылку для установки/развертывания приложений Python.

Вы должны увидеть версию Python. Настройте App Directory (каталог для приложений), чтобы указать, где должен находиться ваш код, в данном случае: public_html/exampleapppython. Настройте App URI (URI приложения), где вы хотите, чтобы ваше приложение было доступно, в данном случае «exampleapppython».

На рисунке выше показан результат нажатия кнопки «setup»: было создано приложение, указывающее на файл python (в данном случае myapp.py) которые вы можете редактировать.

Один из важных шагов, оставшихся здесь, это добавить модуль Flask, Найдите» Flask » и добавьте его.

Если вы начали с нуля, используя cPanel, приложение было бы создано в указанном каталоге приложений, который Вы указали с похожей структурой

Если вы указали свой Каталог приложений (App Directory) на существующее приложение, скрипт cPanel добавит только passenger_wsgi.py файл и .htaccess file файл.

«public«каталог используется для активов, «myapp.py» file-ваша точка входа в приложение, «passenger_wsgi.py» это скрипт, рассказывающий passenger’у, как интерпретировать ваше приложение и какой файл использовать для обслуживания ваших запросов, файл «htaccess» сообщает Apache URI приложения, Каталог приложений (App Directory) и версию Python (расположение), настроенную в cPanel.

Приложение Flask

Приложение Flask очень простое, но я добавил волшебную линию, которая делает еще проще работу Flask ((application = app). Сценарий passenger_wsgi будет искать код приложения в переменной под названием «application», а не «app», как используется в Flask при его разработке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *