我使用 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()
最佳答案
Gunicorn(和大多数 WSGI 服务器)默认在您指向的任何模块中查找名为 application
的可调用对象。添加别名 from myproject import myapp as application
或 application = 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
关于python - 当名称从 "application"更改时,Gunicorn 找不到应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33379287/