使用 Supervisor for Flask Application 通过 virtualenv 激活 Gunicorn

Activating Gunicorn through virtualenv with Supervisor for Flask Application

我正在尝试使用 (1) nginx (2) gunicorn、(3) git 和 (4) supervisor 将 flask 应用程序部署到 ec2 实例。我已经设置了 nginx、git、gunicorn,但是我在编写 supervisor 脚本时遇到了问题。

我无法让主管在 virtualenv 的上下文中启动 gunicorn。

当我 运行 gunicorn run:app 在 vi​​rtualenv 之外 returns

ImportError: No module named flask

当我 运行 在 vi​​rtualenv 中使用相同的命令时,它工作得很好。

当我 运行 在 vi​​rtualenv 之外执行相同的命令但在虚拟环境中指定 gunicorn(即 /var/www/sitename/env/bin/gunicorn run:app)时,它又可以正常工作了。

这是一个我无法弄清楚的问题,但我想如果我可以在 virtualenv 中安装 supervisor 运行 gunicorn 那就不是问题了,但我做不到那要么。

我尝试在主管脚本中添加两个程序,一个用于启动虚拟环境,另一个用于 gunicorn,使用引号将这两个命令添加到一起,其中一个类似的 SO 答案建议使用 &&结合激活 virtualenv 和启动 gunicorn,声明一个 environment=PATH= 变量,以及许多其他选项;我就是无法让它工作。

我不知道自己哪里做错了,也不知道还能尝试什么;有谁知道我现在能做什么?

我 运行ning python3 - 我读到 supervisor 仅限于 v2,但其他人在回答中提到它只是一个任务管理器,这无关紧要。

你走在正确的轨道上,但它比你做的要简单。 运行 一个名为 运行 的 Flask 应用程序,通过 gunicorn 在您提供的路径下通过 gunicorn 进入入口点应用程序:

/etc/supervisor/conf.d/run.conf

[program:run]
command = /var/www/sitename/env/bin/gunicorn run:app -b localhost:8000
directory = /var/www/sitename
user = siteuser

您可以提供环境参数来设置诸如生产模式之类的东西,但这就是您拥有 gunicorn 的虚拟环境版本所需的全部内容,运行ning python 3 如果它是python 3 venv,运行 你的 flask 应用程序在同一个虚拟环境中。