我尝试使用flask
和flask_restx
(flask-restplus
的分支项目,最终将在AWS上提供服务)来提供一些简单的服务。
当它被送达,我想生成昂首阔步的网页,让别人测试它很容易。
from flask import Flask
from flask_restx import Api
from my_service import service_namespace
app = Flask(__name__)
api = Api(app, version='1.0')
api.add_namespace(service_namespace)
if __name__ == '__main__':
app.run(debug=True)
当我在本地测试它时(例如localhost:5000
),它运行得很好。问题是,当它托管在AWS上时,因为它有一个特定的域(是否被重定向?)(例如 my-company.com/chris-service 到一个容器),文档页面无法找到它所需的文件,例如css
,所以:
我所寻找和尝试的
Python (Flask + Swagger) Flasgger throwing 404 error
flask python creating swagger document error
404 error in Flask
还尝试添加Blueprint
(尽管不知道它的确切功能):
app = Flask(__name__)
blueprint = Blueprint("api", __name__,
root_path="/chris-service",
# url_prefix="/chris-service", # doesn't work
)
api = Api(blueprint)
app.register_blueprint(blueprint)
...
但还是没找到。
更新
因此,这里有更多的信息,根据评论(伪,但技术上相同)
- swagger 的访问点是
my-company.com/chris
(有无http://或https://没有区别)
1.当连接到上述地址时,资产的请求URL为my-company.com/swaggerui/swagger-ui.css
1.您可以访问my-company.com/chris/swaggerui/swagger-ui.css
中的资产
1.因此,我的决议(没有工作)是以某种方式改变root_path
(甚至不确定它是否是正确的措辞),如 * 我已经看过和尝试过 * 所示。
我花了一个星期的时间来解决这个问题,但找不到一个方法。
任何帮助都将是伟大的:)谢谢
2条答案
按热度按时间jmo0nnb31#
总是非常令人沮丧的是,当东西是在本地工作,但不部署到AWS。阅读this github问题,这些404错误的swagger资产可能是由以下原因造成的:
1.缺少javascript swagger软件包
可能不是这样,因为flank-restx会为你做这件事,而且在本地运行它在这种情况下也不应该起作用。
1.缺少gunicorn设置
如果使用--forwarded-allow-ips进行部署,请确保您也正确地设置了gunicorn(您应该这样做).如果您在kubernetes集群中,可以将其设置为 *
https://docs.gunicorn.org/en/stable/settings.html#forwarded-allow-ips
1.根据this帖子,您还必须显式地将
settings.FLASK_SERVER_NAME
设置为类似http://ec2-10-221-200-56.us-west-2.compute.amazonaws.com:5000
的值1.如果这不起作用,尝试部署flak-restx example,这应该可以肯定地起作用。这排除了在您端的任何错误。
khbbv19g2#
在
apidoc.py
文件中定义的Swagger参数。默认的apidoc
对象也在此文件中创建。因此,如果您想自定义它,您必须在app
和api
初始化之前更改它。在您的情况下,应该更改
url_prefix
(我建议使用环境变量,以便能够灵活地设置url_prefix
):第一个