我使用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()
答案 0 :(得分:59)
Gunicorn(以及大多数WSGI服务器)默认在您指向的任何模块中查找名为application
或app
的可调用对象。只需添加别名from myproject import myapp as application
或application = 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