Heroku Gunicorn Procfile
Posted
技术标签:
【中文标题】Heroku Gunicorn Procfile【英文标题】: 【发布时间】:2016-12-15 13:09:44 【问题描述】:我很难找到使用带有 gunicorn 和 Heroku 的烧瓶创建 Procfile 的文档。在某处我发现语法是:
web: gunicorn my_folder.my_module:app
。但我不能让它工作。它只适用于我的 python 脚本:hello.py
位于应用程序的根文件夹中。当我把它放在一个名为 app 的子文件夹中并创建一个 Procfile:web: gunicorn app.hello:app
它不起作用。仅当我使用 web: gunicorn hello:app
并且我的 python 脚本位于根文件夹中时。有人可以解释一下 Heroku 上 gunicorn 的 Procfiles 的正确语法,以及当 python 脚本位于子文件夹中时如何使其工作?
【问题讨论】:
您是否已将__init__.py
文件添加到app 文件夹以使其成为Python 模块?
没有还没有添加..
当你添加那个文件时它会起作用吗?
那是一个空文件夹还是应该包含一些代码?
只是一个空文件就可以了,但我在这里猜测,我不知道 Heroku 也不知道 Procfile 是如何工作的,我只知道 python 需要 __init__.py
才能将文件夹视为 Python 包。
【参考方案1】:
Gunicorn 带有一个标志 --chdir
,可让您选择 Python 应用程序所在的目录。因此,如果您的目录结构如下:
my-project/
Procfile
my_folder/
my_module.py
而my_module.py
包含:
app = Flask(__name__, ...)
您可以将以下内容放入您的Procfile
:
web: gunicorn --chdir my_folder my_module:app
【讨论】:
您的评论为我节省了数小时的调试时间!谢谢你能解释一下 my_module:app 是如何工作的吗? 扩展了我的答案。web: gunicorn app:app
第一个app
表示运行应用程序的python 文件的名称或它所在模块的名称。第二个app
表示在其中命名的应用程序名称你的 .py 文件。只是想添加,因为它有助于澄清 procfile 的内容及其语法。例如。在以下代码中,您的应用名称将是 my_awesome_app:if __name__ == '__main__':
my_awesome_app.run()
我们是否也有在此处添加端口号的规定?示例:web: gunicorn wsgi:app port:8080
以上是关于Heroku Gunicorn Procfile的主要内容,如果未能解决你的问题,请参考以下文章
Heroku 上的 Gunicorn 'ImportError: No module named app.wsgiapp'
如何调试使用 whitenoise、gunicorn 和 heroku 服务的 django 静态文件?
Heroku gunicorn 部署错误:NoModuleNameError
ModuleNotFound 错误尝试在 Heroku 中打开 Django 应用程序 - gunicorn 设置问题?