Heroku Procfile gunicorn自定义模块名称
上下文: 我正在编写一个中等大小的flask应用程序(10-15个视图),在此过程中,我希望以一种易于维护和扩展的方式组织代码(不像大多数flask应用程序那样是一个单一文件) 应用程序的结构如下所示:Heroku Procfile gunicorn自定义模块名称,heroku,flask,gunicorn,foreman,Heroku,Flask,Gunicorn,Foreman,上下文: 我正在编写一个中等大小的flask应用程序(10-15个视图),在此过程中,我希望以一种易于维护和扩展的方式组织代码(不像大多数flask应用程序那样是一个单一文件) 应用程序的结构如下所示: /AwesomeHackings /ENV /AwesomeHackings /models /static /templates /__init__.py /awesome.py /
/AwesomeHackings
/ENV
/AwesomeHackings
/models
/static
/templates
/__init__.py
/awesome.py
/awesome.cfg
/Procfile
/README.MD
/requirements.txt
/run.py
问题:
我无法让foreman处理未命名为“app”的烧瓶应用程序。我希望run.py成为我的应用程序的入口点
我正在使用gunicorn+gevent,我当前的程序文件包含:
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失败了,对模块的描述毫无意义。我在中找到了解决方案。gunicorn的主要参数为模块:
gunicorn[OPTIONS]应用程序模块
其中,APP\u模块
的模式为MODULE\u NAME:VARIABLE\u NAME
虽然将语法设置为关键字参数app:someIdentifier似乎合乎逻辑,因为所有教程都使用名为
app
的模块,但事实并非如此。对于我的情况,正确的论据是run:app
我有一个非常类似的设置,尽管我理解为什么会是run:app,但它在我这方面仍然不起作用。你的awesome.py文件中到底是什么?在本例中,awesome.py包含app对象的定义(以及我编写简单应用程序时的所有视图等)。从运行gunicorn的目录中,如何导入“app”对象?即,来自foo导入应用程序。该模块、变量名组合是需要传递给gunicorn的。你能提供更多关于你的设置的信息和细节吗?很高兴通过电子邮件(我的用户名@gmail.com)提供帮助,供其他人将来参考。我解决了我的问题,并解释了如何解决。