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'

heroku上的gunicorn:绑定到本地主机

如何调试使用 whitenoise、gunicorn 和 heroku 服务的 django 静态文件?

Heroku gunicorn 部署错误:NoModuleNameError

Heroku Gunicorn Procfile

ModuleNotFound 错误尝试在 Heroku 中打开 Django 应用程序 - gunicorn 设置问题?