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

标签 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()

最佳答案

Gunicorn(和大多数 WSGI 服务器)默认在您指向的任何模块中查找名为 application 的可调用对象。添加别名 from myproject import myapp as applicationapplication = 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/

相关文章:

python - 如何使用 Python 3 查找/替换不可打印/非 ASCII 字符?

python - Redis:查找所有早于

python - 在 Flask 路由中使用变量

python-3.x - 将 python 日志记录添加到 FastApi 端点,托管在 docker 上不显示 API 端点日志

python - 在tensorflow中要实现训练结果100%可复现,需要在哪里设置seeds?

python - 获取 Python 中的 Trac 项目列表

python - 在 Python/Flask/sqlAlchemy 环境中使用 pymssql 时出现 Adaptive Server 连接失败错误

jquery - 使用 ajax 和 jQuery 根据在 flask 中第一个下拉列表中选择的值填充第二个下拉列表

python - 如何将 Flask/gunicorn 应用程序作为 systemd 服务运行

python - 通过 Gunicorn 运行 manage.py 命令