Flask在AWS Elastic Beanstalk部署时出现404错误

2 投票
2 回答
1686 浏览
提问于 2025-04-18 06:18

我有一个Flask应用程序,在开发用的web服务器和uwsgi上运行得很好,但当我把它部署到AWS Elastic Beanstalk上时,所有我定义的外部路由都出现404错误。

我使用的是这里推荐的较大应用结构:http://flask.pocoo.org/docs/patterns/packages/

所以我的application.py看起来是这样的:

import settings
from flask import Flask

app = Flask(__name__)

app.config.from_object(settings)

application = app

#Ignore not used -> this pulls the views into the main app.
#see http://flask.pocoo.org/docs/patterns/packages/
import messages.views

#more imported applications here

@application.route("/", methods=['GET', 'POST'])
def hello():
    #health check endpoint.
    return "hi"

application.py中的hello方法可以正确返回200,但在message.views中的调用都返回404。

2 个回答

0

在Flask应用的架构中,像一个包一样,你会得到一个这样的目录结构:

    /yourapplication
        /yourapplication
            /__init__.py
            /static
                /style.css
            /templates
                layout.html
                index.html
                login.html
            /views
                /__init_.py
        ... 
    ...

你会把大部分代码放在__init__.py文件里,这样你就可以把你的视图和应用当作包的模块来调用。

但是正如这里提到的,你仍然在使用一个叫做application.py的文件,这个文件似乎并不是包的一部分。此外,在这种架构下工作时,你需要特别小心循环导入的问题,具体可以参考网页末尾的说明。

1

为了测试,我决定把我的 application.py 文件改名为 app.py,然后新建一个 application.py 文件,里面的内容是:

from app import app as application

这样做解决了问题!我现在可以正确访问我所有的接口了。

不过,我还是不明白原来的设置到底哪里出了问题。

撰写回答