我正在尝试使用(1)nginx(2)gunicorn,(3)git和(4)主管将烧瓶应用程序部署到ec2实例。我已经设置了nginx,git,gunicorn,但是我在编写supervisor脚本时遇到了麻烦。
我无法让主管在virtualenv的背景下发射炮弹。
当我在virtualenv之外运行gunicorn run:app
时,它会返回
ImportError: No module named flask
当我在virtualenv中运行相同的命令时,它可以正常工作。
当我在virtualenv之外运行相同的命令但在虚拟环境中指定gunicorn(即/var/www/sitename/env/bin/gunicorn run:app
)时它再次正常工作。
这是一个我无法弄清楚的问题,但我想如果我可以让主管在virtualenv中运行gunicorn它不会是一个问题,但我也无法做到这一点。
我已经尝试在管理程序脚本中添加两个程序,一个用于启动虚拟环境,另一个用于gunicorn,使用引号将两个命令添加到一起,类似SO答案建议,使用&&
组合激活virtualenv和发射gunicorn,声明environment=PATH=
变量,以及许多其他选项;我无法让它发挥作用。
我不知道我做错了什么或者还有什么可尝试的;有谁知道我现在可以做些什么?
我正在运行python3 - 我读到主管仅限于v2,但有人在回答中提到它只是一个任务管理器而且应该没关系。
答案 0 :(得分:3)
你走在正确的轨道上,但它比你做的更简单。要通过主管下的gunicorn运行带有入口点应用程序的Flask应用程序,并使用您提供的路径:
<强> /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如果它是一个python 3 venv,运行你的烧瓶应用程序虚拟环境。