当名称从 "application" 更改时,Gunicorn 找不到应用
Gunicorn can't find app when name changed from "application"
我使用 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
如果您尝试在 server/cats.py
内为变量名称 app
的应用程序提供服务,您可以按如下方式在端口 8000 上启动服务器:
gunicorn server.cats:app -b 0.0.0.0:8000
我使用 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
如果您尝试在 server/cats.py
内为变量名称 app
的应用程序提供服务,您可以按如下方式在端口 8000 上启动服务器:
gunicorn server.cats:app -b 0.0.0.0:8000