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

8
我正在尝试使用nginx(1)、gunicorn(2)、git(3)和supervisor(4)将flask应用部署到ec2实例上。我已经设置好了nginx,git和gunicorn,但是我在编写supervisor脚本时遇到了麻烦。
我无法使supervisor在virtualenv的上下文环境中启动gunicorn。
当我在virtualenv之外运行gunicorn run:app时,它会返回:
ImportError: No module named flask

当我在虚拟环境中运行相同的命令时,它可以正常工作。

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

这是一个问题,我无法解决,但我想如果我能让supervisor在虚拟环境内运行gunicorn,那就不会有问题了,但我也做不到。

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

我不知道我做错了什么或者还有什么别的方法可尝试;有谁知道我现在该怎么办吗?

我正在运行python3 - 我读到supervisor仅限于v2,但其他人在答案中提到它只是一个任务管理器,这应该没有关系。

1个回答

12

你已经朝着正确方向前进了,但它比你想象的更简单。如果要通过gunicorn在supervisor下运行一个名为“run”的Flask应用程序,并使用您提供的路径作为入口点“app”:

/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的虚拟环境版本,如果它是python 3 venv,则使用Python 3运行,将你的Flask应用程序在同一虚拟环境中运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接