【发布时间】:2012-12-02 17:59:41
【问题描述】:
我有一个试图通过 Gunicorn 运行的 Flask 应用程序。
该应用程序位于一个模块中,假设其名为“mymodule”,位于mymodule/ 的__init__.py 文件如下所示:
from flask import Flask
app = Flask(__name__)
if __name__ == '__main__':
app.run()
但是,无论是哪个 URL,都会返回 404 错误。
我尝试在包含 mymodule 文件夹的文件夹中运行 Gunicorn:
gunicorn -b 127.0.0.1:5000 mymodule:app
我尝试通过运行gunicorn -b 127.0.0.1:5000 runapp.py 将 Gunicorn 指向我的调试文件“runapp.py”,但结果是error: [Errno 48] Address already in use。
我做错了什么?
编辑:文件结构
/runapp.py
/mymodule/__init__.py
/mymodule/views.py
runapp.py:
from mymodule import app, views
app.run(debug=True)
__init.py__:
from flask import Flask
from mymodule import views
app = Flask(__name__)
if __name__ == '__main__':
app.run()
views.py:
from mymodule import api
from mymodule.forms import SettingsForm
from functools import wraps
from flask import request, Response, render_template, redirect, url_for
[...]
@app.route('/')
@requires_auth
def dashboard():
data = api.get_overview()
return render_template('dashboard.html', data=data)
【问题讨论】:
-
您的应用程序不处理任何路径。你不应该至少处理路径“/”吗?
-
该代码位于应用程序的另一部分 - 有一个处理 / 的路由 - 如果我在没有 Gunicorn 的情况下运行“python runapp.py”,它就可以正常工作。
-
但是你使用的是
gunicorn mymodule:app,所以使用的是app,而不是runapp。 -
是的 - 好的,这可能是个问题。
__init__.py文件似乎没有导入app。如果我说它应该from mymodule import app,它会说ImportError: cannot import name app。只有在直接通过 Gunicorn 加载时才会发生 - 如果我这样做python runapp.py它工作正常。 -
我的问题是你一直提到
runapp.py,但你只给我们看了__init__.py,所以不容易猜……runapp.py暴露了什么?