【问题标题】:Gunicorn shows 404 instead of appGunicorn 显示 404 而不是 app
【发布时间】: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暴露了什么?

标签: python flask gunicorn


【解决方案1】:

您收到 Errno 48 是因为同一个端口 (5000) 已经忙于另一个应用程序,这意味着您可能会运行您的应用程序两次。

404 问题是由于缺少路由引起的。路由未正确附加到 app,因为您没有将其导入 views 模块。来自Flask documentation

这是一个例子__init__.py

from flask import Flask
app = Flask(__name__)

import yourapplication.views

这就是 views.py 的样子:

from yourapplication import app

@app.route('/')
def index():
    return 'Hello World!'

请注意,__init__.py 中的视图是在创建 Flask 实例之后导入的。

【讨论】:

  • 我不明白。我在 mymodule 文件夹的 views.py 中定义了路由(也是“/”)。当我通过 runapp.py 运行应用程序时工作正常。
  • 完成 - 在原始问题中。
  • @phidah 我已经编辑了我的答案,请检查是否有帮助。
猜你喜欢
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2016-04-16
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多