gunicorn 报错 failed to load application

目录结构:

/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 ?

阅读 5.4k
1 个回答

自问自答:

# 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给启动配置文件即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进