【问题标题】:Gunicorn can't find app when name changed from "application"当名称从“应用程序”更改时,Gunicorn 找不到应用程序
【发布时间】:2016-01-27 12:46:12
【问题描述】:

我使用gunicorn --workers 3 wsgi 来运行我的 Flask 应用程序。如果我将变量application 更改为myapp,Gunicorn 会给出错误AppImportError: Failed to find application: 'wsgi'。为什么会出现此错误,如何解决?

myproject.py:

from flask import Flask

myapp = Flask(__name__)

@myapp.route("/")
def hello():
    return 'Test!'

if __name__ == "__main__":
    myapp.run(host='0.0.0.0')

wsgi.py:

from myproject import myapp

if __name__ == "__main__":
    myapp.run()

【问题讨论】:

    标签: python flask gunicorn


    【解决方案1】:

    Gunicorn(和大多数 WSGI 服务器)默认在您指向的任何模块中查找名为 application 的可调用对象。添加别名 from myproject import myapp as applicationapplication = myapp 将使 Gunicorn 再次发现可调用对象。

    但是,不需要wsgi.py 文件或别名,Gunicorn 可以直接指向真正的模块并可以调用。

    gunicorn myproject:myapp --workers 16
    # equivalent to "from myproject import myapp as application"
    

    Gunicorn 还可以调用应用程序工厂(可选地使用参数)来获取应用程序对象。 (这在 Gunicorn 20 中暂时不起作用,但在 20.0.1 中是 added back。)

    gunicorn 'myproject.app:create_app("production")' --workers 16
    # equivalent to:
    # from myproject.app import create_app
    # application = create_app("production")
    

    对于不支持调用工厂的 WSGI 服务器,或者对于其他更复杂的导入,需要一个 wsgi.py 文件来进行设置。

    from myproject.app import create_app
    app = create_app("production")
    
    gunicorn wsgi:app --workers 16
    

    【讨论】:

      【解决方案2】:

      如果您尝试在server/cats.py 中使用变量名称app 提供应用程序,您可以在端口8000 上启动服务器,如下所示:

      gunicorn server.cats:app -b 0.0.0.0:8000
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-28
        • 2022-09-28
        • 1970-01-01
        • 2023-02-01
        相关资源
        最近更新 更多