При развертывании Django в prod, Gunicorn живет в виртуальной среде, но мы деактивируем виртуальную среду, когда переходим к работе с Nginx

Я просмотрел несколько руководств в Интернете о том, как установить Django, Postgres, Gunicorn и Nginx в производстве. Я заметил, что всегда рекомендуется устанавливать все зависимости Python внутри виртуального окружения. Это касается и Gunicorn.

Например, сначала мы запускаем нашу виртуальную среду, затем выполняем команду 'manage.py runserver 0.0.0.0:8000', после чего проверяем, привязывается ли к ней Gunicorn. Как только мы увидим, что Gunicorn работает, мы деактивируем нашу виртуальную среду, чтобы начать настройку Nginx. Повторное включение виртуальной среды не упоминается.

Как Gunicorn может обрабатывать запросы, когда он живет внутри виртуальной среды, которая была деактивирована? Я предполагаю, что где-то есть механизм, при котором виртуальная среда включается автоматически. Но где и когда включается виртуальная среда? И как она включается?

Я пробовал искать ответы в Интернете и в учебниках, но так и не смог найти ничего, что объясняло бы это полностью.

Деактивация виртуальной среды ничего не меняет для gunicorn, потому что виртуальная среда - это просто контекст выполнения - путь к месту расположения двоичных зависимостей - и ее деактивация не разрушает ее.

Когда вы деактивируете этот контекст выполнения, из него выходит только текущий экземпляр вашей оболочки (скажем, окно терминала). Другие вещи, которые полагаются на этот контекст выполнения, могут продолжать свободно использовать его, включая процессы, которые были порождены в этом же экземпляре оболочки в предыдущее время.

На самом деле - у меня нет ссылки на это - но AFAIK Python забирает весь контекст выполнения в память, поэтому независимо от того, что происходит с сессиями оболочки или окружениями в других местах, вероятно, не имеет ни малейшего значения. Все, что нужно приложению, уже загружено и не будет освобождено до выхода главного процесса приложения.

Причина, по которой трудно найти материал, подробно освещающий эту тему, заключается, вероятно, в том, что это не относится к Python или виртуальной среде, а связано с тем, как операционная система управляет процессами и памятью - что не всегда является простой темой.

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