将 Django 部署到生产环境时,Gunicorn 生活在虚拟环境中,但是当我们上线 Nginx 时,我们停用虚拟环境

问题描述 投票:0回答:1

我一直在关注一些关于如何在生产中设置 Django、Postgres、Gunicorn 和 Nginx 的在线教程。我注意到始终建议在虚拟环境中安装所有 Python 依赖项。这包括 Gunicorn。

例如,我们首先启动虚拟环境,然后执行“manage.py runserver 0.0.0.0:8000”命令,然后测试 Gunicorn 是否绑定到它。一旦我们看到 Gunicorn 可以工作,我们就停用虚拟环境以开始配置 Nginx。从未提及再次启用我们的虚拟环境。

当 Gunicorn 位于已停用的虚拟环境中时,它如何处理请求?我假设某个地方有一种机制可以自动再次启用虚拟环境。但是虚拟环境在何时何地启用呢?它是如何启用的?

我尝试在网上和教程中寻找答案,但我仍然找不到任何可以完全解释它的内容。

python django gunicorn virtual-environment dev-to-production
1个回答
0
投票

停用虚拟环境不会改变

gunicorn
的任何内容,因为虚拟环境只是一个执行上下文 - 二进制依赖项所在位置的路径 - 停用它不会破坏它。

当您停用该执行上下文时,您的 shell 的当前实例(比如说特定的终端窗口)会退出它。依赖于该执行上下文的其他事物仍然可以自由使用它,包括先前在同一 shell 实例中生成的进程。

事实上 - 我没有对此的引用 - 但据我所知,Python 将整个执行上下文拉入内存,因此无论 shell 会话或其他地方的环境发生什么情况可能都无关紧要。该应用程序已加载所需的所有内容,并且在应用程序的主进程退出之前不会释放它。

很难找到深入介绍这一点的材料的原因可能是因为它不是 Python 的东西,也不是虚拟环境的东西,它与操作系统如何管理进程和内存有关 - 这不一定是一个简单的主题。

© www.soinside.com 2019 - 2024. All rights reserved.