python-2.7 - 在亚马逊 ec2 上运行烧瓶 restplus 应用程序时得到 404
问题描述
好的,我已经完成了研究并尝试并测试了以下内容
但是,那里提供的解决方案都不起作用,我不明白为什么删除常量会起作用?基本上是一样的。
这是我的代码,
import logging.config
import os, settings
from flask import Flask, Blueprint
from restplus.api.model.endpoints.servemodel import ns as modelserve
from restplus.api.apiInit import api
app = Flask(__name__)
# BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# logging.config.fileConfig(os.path.join(BASE_DIR, 'utils', 'logger.conf'))
# log = logging.getLogger(__name__)
def configure_app(flask_app):
flask_app.config['SERVER_NAME'] = settings.FLASK_SERVER_NAME
flask_app.config['SWAGGER_UI_DOC_EXPANSION'] = settings.RESTPLUS_SWAGGER_UI_DOC_EXPANSION
flask_app.config['RESTPLUS_VALIDATE'] = settings.RESTPLUS_VALIDATE
flask_app.config['RESTPLUS_MASK_SWAGGER'] = settings.RESTPLUS_MASK_SWAGGER
flask_app.config['ERROR_404_HELP'] = settings.RESTPLUS_ERROR_404_HELP
def initialize_app(flask_app):
configure_app(flask_app)
blueprint = Blueprint('api', __name__)
api.init_app(blueprint)
api.add_namespace(modelserve)
flask_app.register_blueprint(blueprint)
def main():
initialize_app(app)
# log.info('>>>>> Starting development server at http://{}/api/ <<<<<'.format(app.config['SERVER_NAME']))
app.run(debug=settings.FLASK_DEBUG)
if __name__ == "__main__":
main()
现在,如果您建议我在 Blueprint 中设置一个“/api”路径,我也尝试过,但没有成功。modelserve 命名空间只是 / 和 /recognize 的命名空间,用于功能目的。
我希望我的招摇 UI 在 0.0.0.0:5000 运行。变量 settings.FLASK_SERVER_NAME 就是这样设置的。控制台所说的只是 404,没有任何解释。
我也尝试过打印 app.url_map 并看到应用程序的所有路由都在应该注册的地方注册。
Map([<Rule '/swagger.json' (HEAD, OPTIONS, GET) -> api.specs>,
<Rule '/recognize/' (POST, OPTIONS) -> api.recognize_hand_written_digit_recognizer>,
<Rule '/recognize/' (POST, OPTIONS) -> api.recognize_hand_written_digit_recognizer_2>,
<Rule '/' (HEAD, OPTIONS, GET) -> api.doc>,
<Rule '/' (HEAD, OPTIONS, GET) -> api.root>,
<Rule '/swaggerui/<filename>' (HEAD, OPTIONS, GET) -> restplus_doc.static>,
<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>])
但是仍然大摇大摆的ui不起作用。我不确定问题是什么,设置 debug=True 也没有帮助我。在这里可以做什么?
解决方案
弄清楚了。
在亚马逊 ec2 上使用 Flask-RESTPlus 时,将服务器的 ip 地址作为主机。因此,例如,如果服务器的 ip 是 ec2-10-221-200-56.us-west-2.compute.amazonaws.com 则将其设置为主机。所以最终设置.FLASK_SERVER_NAME="http://ec2-10-221-200-56.us-west-2.compute.amazonaws.com:5000"。
这应该使您的招摇 UI 和应用程序的其他部分正常工作!
推荐阅读
- python - 在 django 中嵌入 jupyter notebook
- syntax - 我如何代表丢失的 URN?
- excel - 使用偏移量时覆盖单元格的值
- python - 需要从mysql数据库中的多个表中提取数百万行
- python - 在 python 中绘制 3d 数据的 2d 切片(最好使用 matplotlib)
- nlp - 提取序列号和未知词的最佳NER算法
- android - 当使用动态链接安装应用程序时,为什么“继续”按钮不显示在 Play 商店中?
- json-server - 如何在发布请求时从 json-server 返回值?
- r - 使用 dplyr 和 forcats 包根据分组变量中的值更改因子水平
- java - 检查对请求的响应是否成功的最简单方法是什么?