我正在尝试用烧瓶构建一个简单的应用程序,我决定也使用gunicorn和docker。
目前我有这样的配置:
> app
> myapp
__init__.py
index.html
docker-compose.yml
Dockerfile
我的docker-compose.yml
:
version: '2'
services:
web:
build: .
volumes:
- .:/app
command: /usr/local/bin/gunicorn -b :8000 myapp:app
working_dir: /app
我的__init__.py
:
import os
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
if __name__ == '__main__':
app.run()
此最小配置有效,我可以访问我的应用程序并获取我的索引页。
我不喜欢在__init__.py
内创建我的应用,因此我想将应用创建移到app.py
文件中。
新结构将是:
> app
> myapp
__init__.py
app.py
index.html
docker-compose.yml
Dockerfile
app.py
将包含旧__init__.py
文件的内容,而新的__init__.py
文件将为空。
这不起作用。我收到错误
无法找到应用程序:'myapp'
我不明白为什么。
对此有何想法?
答案 0 :(得分:3)
在第一个配置中,您的Flask应用程序直接位于包myapp
;移动后,它位于模块myapp.app
中。
Gunicorn expects将应用指定为module_name:variable_name
,有点像from module_name import variable_name
。
选项一:指定正确的模块路径:
/usr/local/bin/gunicorn -b :8000 myapp.app:app
选项二:将应用程序添加回myapp
。在myapp/__init__.py
中,添加
from .app import app
请注意,如果变量和模块共享名称,模块将会黯然失色(不是一件好事,虽然也不是关键)。