在生产中将烧瓶作为包装运行

时间:2017-12-11 16:25:33

标签: python heroku flask pip

我正在尝试部署我的烧瓶应用程序。通常我会有app.py并将所有代码放入其中。

app.py
templates/
|
|--index.html

对于我真正的小项目。但后来我有一个稍大的应用程序,并按照the larger app guide by flask。 所以我有这个:

setup.py
app/
    __init__.py
    views.py
    models.py
    forms.py
    templates/
    | ---index.html

我现在在views.py中的__init__.py中运行应用程序中的所有路线和视图:

from flask import Flask
app = Flask(__name__)
import app.views # Name in setup.py
if __name__ == "__main__":
    app.run()

(这只是一个例子) 所以现在我按照指南运行pip install -e .并运行: >set FLASK_APP=app(name I set in setup.py) flask run它有效。除了我不知道如何用一个命令运行它。由于没有一个文件可以运行我不能使用gunicorn或类似的东西。我不知道如何执行这个应用程序。我如何在云服务器heroku上运行pip install .? 我的问题是因为我必须从app导入__init__.py并使用import blog 导入视图。[insert import] (模型,视图等)感谢任何帮助。谢谢。

编辑:我不想使用蓝图。这可能太多了。我的应用程序是中等的,不小但不大

2 个答案:

答案 0 :(得分:6)

您绝对可以使用Gunicorn运行该项目。 Gunicorn不仅限于单个文件,它还可以像flask run一样导入Python模块。 Gunicorn只需要知道要导入的模块,即在该模块内调用的WSGI对象。

使用FLASK_APP时,flask run所做的只是查找module.appmodule.applicationFlask()类的实例。它还支持create_app()make_app()应用工厂,但是您没有使用这种工厂。

Gunicorn将不会搜索,如果仅给它一个模块,它将期望名称application是可调用的WSGI。在您的情况下,您正在使用app,因此您所要做的就是明确告诉它使用什么名称:

gunicorn app:app

:之前的部分是要导入的模块(在您的情况下为app),冒号之后的部分是可调用对象(在模块中也称为app)。

如果您已将FLASK_APP设置为Heroku config var,并想重新使用它,则可以在命令行上为gunicorn引用它:

gunicorn $FLASK_APP:app

答案 1 :(得分:-1)

对于heroku,它可以处理requirement.txtsetup.py

c.f。 https://devcenter.heroku.com/articles/python-pip#local-file-backed-distributions

  

如果您的Python应用程序包含setup.py文件,但不包含requirements.txt文件,则将使用python setup.py development安装软件包并解决依赖性。

     

如果您已经有一个需求文件,但想利用此功能,则可以将以下内容添加到需求文件中:

     

-e .

关于运行命令,我想你就像把Procfile放在了

web: FLASK_APP=app flask run

web: FLASK_APP=app python -m flask run