作者:贝乐小凸 | 来源:互联网 | 2023-02-01 16:03
我正在尝试使用(1)nginx(2)gunicorn,(3)git和(4)Supervisor将Flask应用程序部署到ec2实例。我已经设置了nginx,git,gunicorn,但是在编写主管脚本时遇到了麻烦。
我无法让主管在virtualenv的上下文中启动gunicorn。
当我gunicorn run:app
在virtualenv之外运行时,它将返回
ImportError: No module named flask
当我在virtualenv中运行相同的命令时,它工作正常。
当我在virtualenv外部运行相同的命令但在虚拟env中指定gunicorn时(即/var/www/sitename/env/bin/gunicorn run:app
),它又可以正常工作了。
这是我无法解决的问题,但是我认为,如果我可以让主管在virtualenv内运行gunicorn,那将不是问题,但我也无法做到。
我试过在主管脚本中添加两个程序,一个用于启动虚拟环境,另一个用于gunicorn,使用引号(一个类似的SO答案建议)将这两个命令加在一起,&&
用于结合激活virtualenv和启动gunicorn,声明一个envirOnment=PATH=
变量,以及许多其他选项;我就是无法正常工作。
我不知道我做错了什么或尝试其他什么。有人知道我现在能做什么吗?
我正在运行python3-我读到主管仅限于v2,但其他人在回答中提到它只是任务管理器,没关系。
1> jla..:
您处在正确的轨道上,但是比您做的要简单。要通过主管在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
您可以提供环境参数来设置生产模式之类的东西,但这就是拥有虚拟环境版本的gunicorn所需要的,如果它是python 3 venv,则运行python 3,并在同一虚拟环境中运行flask应用程序。