【问题标题】:Heroku Gunicorn ProcfileHeroku 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 包。

标签: python heroku flask gunicorn


【解决方案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
猜你喜欢
  • 2012-07-20
  • 2022-10-16
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 2021-08-20
相关资源
最近更新 更多