Heroku Gunicorn Procfile

19
我很难找到有关在Heroku上使用flask与gunicorn创建Procfiles的文档。我在某处找到了语法: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脚本位于子文件夹中时正常工作吗?

当你添加那个文件时,它能正常工作吗? - Jean Jung
这是一个空文件夹还是应该包含一些代码? - CasperTN
1
只需要一个空文件就可以了,但我猜这里可能需要 Procfile 文件,因为我不太了解 Heroku 或者 Procfile 的工作原理。我只知道 Python 需要 __init__.py 文件来将一个文件夹识别为 Python 包。 - Jean Jung
看一下这个模板吧。它包含一个Procfile文件,可以直接部署到Heroku上。您可以学习它的结构,或者通过基于该模板来创建您自己的应用。 - 0x60
你在 Procfile 中放了 unicorn 而不是 gunicorn - dirn
显示剩余3条评论
2个回答

35

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

1
你的评论为我节省了许多调试时间!赞!你能详细解释一下我的模块:应用程序是如何工作的吗? - Espoir Murhabazi
扩展了我的回答。 - kris
10
网页:gunicorn app:app第一个 app 表示运行您的应用程序的 Python 文件的名称或其所在模块的名称。第二个 app 表示在您的 .py 文件中命名的应用程序名称。我想补充一下,因为它有助于澄清 Procfile 的内容和语法。例如,在以下代码中,您的应用程序名称将是 my_awesome_app:if __name__ == '__main__': my_awesome_app.run() - Gerardsson
我们是否有一个选项在这里添加端口号?例如:web: gunicorn wsgi:app port:8080 - Biswajit Roy
这最终解决了我在尝试部署到Heroku并遇到H10错误时的问题。谢谢! - supersaidso

0

你可以尝试使用Hypercorn,因为它是Gunicorn的继任者。
请按照以下方式修改您的Procfile:

web: hypercorn -b 0.0.0.0:$PORT Path_To_Your_File:app

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接