gunicorn 报错 failed to load application

发布于 2022-09-05 22:46:22 字数 909 浏览 12 评论 0

目录结构:

/application
├── app
│   ├── admin
│   │   ├── __init__.py
│   ├── api
│   │   ├── __init__.py
│   ├── exceptions.py
│   ├── home
│   │   ├── __init__.py
│   ├── __init__.py
│   ├── main
│   │   ├── errors.py
│   │   ├── __init__.py
│   │   └── views.py
│   ├── models.py
│   ├── shop
│   │   ├── __init__.py
│   └── views
│       ├── base_layout.html
│       ├── index.html
│       ├── password.html
│       └── pc.html
├── config.py
├── gunicorn.py -- 没用
├── wsgi.py

wsgi.py 代码如下

# file: wsgi.py
from app import create_app
if __name__ == '__main__':
    app = create_app('production')
    app.run()

所在目录: ~/application

执行: gunicorn -b :8080 wsgi 报错:Failed to find application: 'wsgi'
但是,如果执行:gunicorn -b :8080 "app:create_app('production')" 就没问题,正常执行……

why ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

满天都是小星星 2022-09-12 22:46:22

自问自答:

# file:wsgi.py
from .app import create_app

# 变量名:app
app = create_app('production')

启动:./venv/bin/gunicorn -b :8080 wsgi:app

wsgi后跟app是自定义的应用容器变量名称

另:
度娘说可以不单独新建一个特殊的文件供gunicorn使用,但是看实际情况吧。

新建一个独立的文件其实更利于部署、调试和开发。

假设:
1.本地开发
独立文件:local.py

from .app import create_app
app = create_app('local')
app.run(debug=True)

2.线上部署:
独立文件: gunicorn.py

from .app import create_app
app = create_app('production')
app.debug=False
// Logger.....
// init database
// ...

启动文件拆分更利于开发,而且对系统的侵入性更小,应用只暴露一个create_app给启动配置文件即可。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文