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

xiº*_*xiº 36 python flask gunicorn

gunicorn --workers 3 wsgi用来运行我的Flask应用程序.如果我将变量更改applicationmyapp,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')
Run Code Online (Sandbox Code Playgroud)

wsgi.py:

from myproject import myapp

if __name__ == "__main__":
    myapp.run()
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 69

Gunicorn(以及大多数WSGI服务器)默认寻找可命名的callable application或者from myproject import myapp as application你指向它的任何模块.只需添加别名application = myappwsgi.py让Gunicorn再次发现可调用.

但是,wsgi.py不需要文件或别名,Gunicorn可以直接指向真实模块并且可以调用,甚至可以使用参数调用app工厂.application大多数情况下不需要单独的文件.

gunicorn myproject:myapp --workers 16
# equivalent to "from myproject import myapp as application"
Run Code Online (Sandbox Code Playgroud)

Gunicorn从前面的路径输入":"之后的名称.如果有括号,则使用参数调用名称以获取应用程序.如果不是,则假定该名称是应用程序.


duh*_*ime 15

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

gunicorn server.cats:app -b 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)