我正在尝试在Heroku上运行Flask应用程序(使用Nginx + Gunicorn)。我的Heroku procfile是:
web: bin/start-nginx gunicorn -c config/gunicorn.py myflaskmodule:app
我不断从Gunicorn中获取错误,例如:
gunicorn.errors.HaltServer: <HaltServer 'App failed to load.' 4>
或者,根据我尝试过的应用名称,“ gunicorn”错误可能是:
Application object must be callable.
Flask应用程序设置在名为myflaskmodule
的目录中,该目录包含一个static
目录,templates
目录,auth.py
,db.py
,{{1 }}和btac.py
。
在__init__.py
中,蓝图定义为:
btac.py
然后我在 bp = Blueprint('btac', __name__, url_prefix='/btac')
中定义了几个flask函数,例如:
btac.py
在@bp.route('/', methods=['GET'])
def index():
# Do some things...
return render_template()
中,我有一个功能:
__init.py__
在终端(或bash脚本)中,执行def create_app(test_config=None):
app = Flask(__name__, instance_relative_config=True)
# lots of other unrelated content here...
db.init_app(app)
app.register_blueprint(auth.bp)
app.register_blueprint(btac.bp)
return app
和export FLASK_ENV=development
之后,Flask应用程序将以export FLASK_APP=myflaskmodule
在本地运行。
如何在Heroku procfile中定义最后一个参数?它应该是flask run
。我已经尝试过module_name:app_name
,myflaskmodule:app
,myflaskmodule:myflaskmodule
,myflaskmodule:bp
。
我非常有信心参数的第一部分应该是myflaskmodule:btac
(Flask主目录的名称),但是我似乎无法正确定义Flask应用程序的名称。
烧瓶== 1.0.2,古尼康角== 19.9.0
答案 0 :(得分:2)
如果您将web: gunicorn "myflaskmodule:create_app()"
放入Procfile中,那应该可以工作。在上面的代码中,您没有与myflaskmodule:app
一起使用的应用程序变量,但是您确实有一个返回Flask应用程序的函数,因此您可以使用它。