上下文 我正在编写一个中型烧瓶应用程序(10-15个视图),在此过程中,我希望以一种易于维护和可扩展的方式组织代码(不像大多数Flask应用程序那样是单片文件)。
应用程序的结构模仿documentation,如下所示:
/AwesomeHackings
/ENV
/AwesomeHackings
/models
/static
/templates
/__init__.py
/awesome.py
/awesome.cfg
/Procfile
/README.MD
/requirements.txt
/run.py
问题: 我无法让工头使用一个名为'app'的烧瓶应用程序。我很乐意将run.py作为我申请的入口点。
我正在使用gunicorn + gevent,而我当前的Procfile包含:
web: gunicorn -w 2 -b 0.0.0.0:$PORT -k gevent app:run
我一直在使用run.py
来测试应用程序:
from AwesomeHackings import awesome
awesome.app.run(debug=True)
因此我假设我可以在Procfile中简单地用run
代替app
,但是当执行foreman start
时,gunicorn会因模块无效而无效。
答案 0 :(得分:10)
我在Django's documentation找到了解决方案。 gunicorn的主要参数是模块:
gunicorn [OPTIONS] APP_MODULE
其中APP_MODULE
的格式为MODULE_NAME:VARIABLE_NAME
虽然语法似乎是一个关键字参数app:someIdentifier,因为所有教程都使用名为app
的模块,但事实并非如此。我的情况的正确论据是run:app
。