【发布时间】:2018-11-02 19:20:19
【问题描述】:
我正在尝试通过eb cli 在 Elastic Beanstalk 上托管一个使用 Flask-RESTful 实现 REST API 的 Flask 应用程序。我已成功部署我的应用程序,但我的事件日志中没有收到任何错误消息。我可以成功地通过 ssh 进入实例并运行脚本来预填充我的数据库和所有内容。但是每当我尝试访问任何路由时,我都会不断收到 404 错误。
我最初认为是因为它没有找到我的 WSGIPath,所以我将文件名更改为 application.py 并更新了 EBS 软件配置以指向该文件。我还根据 AWS 文档在代码库中将所有 app 实例更新为 application。依然没有。有谁知道可能出了什么问题?
这是我的application.py:
from flask import Flask
from config import Config
CONFIG = Config()
# AWS Elastic Beanstalk expects an `application` variable.
application = Flask(__name__)
if __name__ == "__main__":
# Importing these here to avoid issue with circular imports
from endpoints.v1.exports import exports_api
from endpoints.v1.imports import imports_api
application.register_blueprint(exports_api, url_prefix="/api/v1")
application.register_blueprint(imports_api, url_prefix="/api/v1")
application.run(debug=CONFIG.DEBUG)
这是application.py 文件在文件夹结构中的位置:
- project root
- ...
- application.py
- ...
【问题讨论】:
-
Flask 应用程序是否正确启动?您是否尝试过将应用程序托管在不同的端口上(仅用于测试它)并允许通过防火墙?此外,如果您将所有内容都放在操作系统根目录中,这不是最好的主意,并且可能会导致后续问题。愚蠢的问题,但你确定你访问的是正确的 URL,因为奇怪的是没有日志。
-
这里的
root是项目的根目录,而不是操作系统。我的错,我会更新问题以使其更清楚。对于上下文,我对 Flask 和 EBS 都是新手,那么如何测试应用程序是否正确启动?我假设确实如此,因为我没有像我读过的其他人那样在事件日志中收到 WSGIPath 错误。我正在访问 EBS 环境菜单上显示的 URL。我复制并粘贴了一百万次以确保我不断得到 404。 -
所以 Flask 默认在 5000 端口上运行。你可以反向代理 80 上的任何内容以通过 WSGI 连接到那个,或者如果你想公开它,可以在 80 上托管 Flask?否则,要使用 5000,您需要允许它通过 AWS 防火墙。当您访问正常链接时,我认为您没有访问 Flask。此外,Flask 不是 HTML 页面,因此您实际上必须以
python application.py开头,您可能知道但这里涵盖了所有基础。
标签: flask amazon-elastic-beanstalk flask-restful ebcli