无法在具有不同url的远程托管服务器上提供swagger

lvmkulzt  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(164)

我尝试使用flaskflask_restxflask-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)
...

但还是没找到。

更新

因此,这里有更多的信息,根据评论(伪,但技术上相同)

  1. 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(甚至不确定它是否是正确的措辞),如 * 我已经看过和尝试过 * 所示。
    我花了一个星期的时间来解决这个问题,但找不到一个方法。
    任何帮助都将是伟大的:)谢谢
jmo0nnb3

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,这应该可以肯定地起作用。这排除了在您端的任何错误。

khbbv19g

khbbv19g2#

apidoc.py文件中定义的Swagger参数。默认的apidoc对象也在此文件中创建。因此,如果您想自定义它,您必须在appapi初始化之前更改它。
在您的情况下,应该更改url_prefix(我建议使用环境变量,以便能够灵活地设置url_prefix):
第一个

相关问题