Heroku Procfile gunicorn自定义模块名称

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 /

上下文: 我正在编写一个中等大小的flask应用程序(10-15个视图),在此过程中,我希望以一种易于维护和扩展的方式组织代码(不像大多数flask应用程序那样是一个单一文件)

应用程序的结构如下所示:

/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)提供帮助,供其他人将来参考。我解决了我的问题,并解释了如何解决。