【问题标题】:Procfile gunicorn custom module nameProcfile gunicorn 自定义模块名称
【发布时间】:2012-05-27 02:38:14
【问题描述】:

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

应用程序的结构模仿documentation 如下:

/AwesomeHackings
    /ENV
    /AwesomeHackings
        /models
        /static
        /templates
        /__init__.py
        /awesome.py
        /awesome.cfg
    /Procfile
    /README.MD
    /requirements.txt
    /run.py

问题: 我无法让工头使用未命名为“app”的烧瓶应用程序。我希望 run.py 成为我的应用程序的入口点。

我正在使用 gunicorn + gevent,我当前的 Procfile 包含:

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 中的 app 替换为 run,但是在执行 foreman start 时,gunicorn 会失败,并会出现关于模块的毫无意义的废话。

【问题讨论】:

    标签: heroku flask gunicorn foreman


    【解决方案1】:

    我在Django's documentation 中找到了解决方案。 gunicorn的主要参数是module:

    gunicorn [OPTIONS] APP_MODULE

    其中APP_MODULEMODULE_NAME:VARIABLE_NAME 模式

    虽然语法是关键字参数 app:someIdentifier 似乎是合乎逻辑的,因为所有教程都使用名为 app 的模块,但实际上并非如此。我的情况的正确论据是run:app

    【讨论】:

    • 我有一个非常相似的设置,虽然我理解它为什么会运行:app,但它仍然无法在我的最终工作。你的 awesome.py 文件到底是什么?
    • 在这种情况下,awesome.py 包含应用程序对象的定义(以及,当我编写简单的单体烧瓶应用程序时,所有视图等)。从您运行 gunicorn 的目录中,您将如何导入“应用程序”对象? IE。从 foo 导入应用程序。该模块,变量名称组合是需要传递给gunicorn的。您能否提供有关您的设置的更多信息和详细信息?很高兴通过电子邮件提供帮助(我的用户名@gmail.com)
    • 供其他人将来参考。我解决了我的问题并在stackoverflow.com/questions/22921187/… 中解释了如何。
    猜你喜欢
    • 2021-08-20
    • 1970-01-01
    • 2016-07-02
    • 2017-06-30
    • 2016-12-15
    • 2018-12-28
    • 2013-06-09
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多