通过Virtualenv使用Supervisor激活Flask应用程序中的Gunicorn

Nik*_*vic 3 nginx flask python-3.x supervisord gunicorn

我正在尝试使用(1)nginx(2)gunicorn,(3)git和(4)Supervisor将Flask应用程序部署到ec2实例。我已经设置了nginx,git,gunicorn,但是在编写主管脚本时遇到了麻烦。

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

当我gunicorn run:app在virtualenv之外运行时,它将返回

ImportError: No module named flask
Run Code Online (Sandbox Code Playgroud)

当我在virtualenv中运行相同的命令时,它工作正常。

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

这是我无法解决的问题,但是我认为,如果我可以让主管在virtualenv内运行gunicorn,那将不是问题,但我也无法做到。

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

我不知道我做错了什么或尝试其他什么。有人知道我现在能做什么吗?

我正在运行python3-我读到主管仅限于v2,但其他人在回答中提到它只是任务管理器,没关系。

jla*_*jla 5

您处在正确的轨道上,但是比您做的要简单。要通过主管在gunnicorn下使用您给定的路径来运行名为Grunk的应用程序,并通过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
Run Code Online (Sandbox Code Playgroud)

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