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

时间:2015-10-27 22:03:23

标签: python flask gunicorn

我使用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()

2 个答案:

答案 0 :(得分:59)

Gunicorn(以及大多数WSGI服务器)默认在您指向的任何模块中查找名为applicationapp的可调用对象。只需添加别名from myproject import myapp as applicationapplication = myapp,即可让Gunicorn再次发现可调用对象。

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

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

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

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

答案 1 :(得分:11)

如果您尝试在app内投放名为server/app.py的应用,则可以按如下方式在端口8000上启动服务器:

gunicorn server.app:app -b 0.0.0.0:8000