当名称从“应用程序”更改时,Gunicorn找不到应用程序

2024-03-29 12:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我用gunicorn --workers 3 wsgi运行我的烧瓶应用程序。如果我将变量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()

Tags: runnamefrompyimportflaskwsgiif
2条回答

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

gunicorn server.cats:app -b 0.0.0.0:8000

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

相关问题 更多 >