在Amazon EC2上运行Flask Restplus应用时获得404

时间:2018-08-05 21:44:39

标签: python-2.7 flask amazon-ec2 flask-restful flask-restplus

好的,我已经完成研究并尝试并测试了以下内容

Related Question

但是,那里提供的解决方案都没有起作用,而且我不明白为什么删除常量会起作用?基本上是同一回事。

这是我的代码,

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也无法帮助我。在这里可以做什么?

1 个答案:

答案 0 :(得分:0)

弄清楚了。

在Amazon 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和应用程序的其他部分正常工作!