当前位置: 首页 > 知识库问答 >
问题:

无法使用uWSGI运行Restplus Flask API

黄博艺
2023-03-14

我正在研究一个烧瓶API,它工作得很好。我现在试图用uWSGI替换Flask开发服务器,但一切都崩溃了。我试图解决这个问题,因为2天,通过教程和搜索这里,但找不到一个解决问题的方法。这是代码:app.py

import logging.config

import settings
import utils
from flask import Flask, Blueprint
from flask_restplus import Resource, Api
from flask_cors import CORS
from api.restplus import api
from api.gan.endpoints.client import ns as gan_client_namespace

# create Flask application
app = Flask(__name__)
CORS(app) # needed for cross-domain requests, allow everything by default

# load logging confoguration and create log object
logging.config.fileConfig('logging.conf')
log = logging.getLogger(__name__)

# 
@app.route("/")
def hello():
    return "Hello World!"

def __get_flask_server_params__():
    '''
    Returns connection parameters of the Flask application

    :return: Tripple of server name, server port and debug settings
    '''
    server_name = utils.get_env_var_setting('FLASK_SERVER_NAME', settings.DEFAULT_FLASK_SERVER_NAME)
    server_port = utils.get_env_var_setting('FLASK_SERVER_PORT', settings.DEFAULT_FLASK_SERVER_PORT)

    flask_debug = utils.get_env_var_setting('FLASK_DEBUG', settings.DEFAULT_FLASK_DEBUG)
    flask_debug = True if flask_debug == '1' else False

    return server_name, server_port, flask_debug

def configure_app(flask_app, server_name, server_port):
    '''
    Configure Flask application

    :param flask_app: instance of Flask() class
    '''
    flask_app.config['SERVER_NAME'] = server_name + ':' + server_port
    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, server_name, server_port):
    '''
    Initialize Flask application with Flask-RestPlus

    :param flask_app: instance of Flask() class
    '''
    blueprint = Blueprint('tf_api', __name__, url_prefix='/tf_api')

    configure_app(flask_app, server_name, server_port)
    api.init_app(blueprint)
    api.add_namespace(gan_client_namespace)

    flask_app.register_blueprint(blueprint)

    #from werkzeug.contrib.fixers import ProxyFix
    #flask_app.wsgi_app = ProxyFix(flask_app.wsgi_app)

def main():
    server_name, server_port, flask_debug = __get_flask_server_params__()
    initialize_app(app, server_name, server_port)
    log.info(
        '>>>>> Starting TF Serving client at http://{}/ >>>>>'.format(app.config['SERVER_NAME'])
        )
    app.run(debug=flask_debug, host=server_name)

if __name__ == '__main__':
    main()

当我用Python app.py运行这个函数时,它工作得很好。

现在我只是尝试使用UWSGI获得相同的结果:

uwsgi --http :8000 --wsgi-file app.py --callable app

命令行消息看起来很好:

命令行消息

我试过所有想到的事情,但都没能解决这个问题。我做的一些事情是:

>

  • 包括以下代码:

    从werkzeug.contrib.fixers导入ProxyFix flask_app.wsgi_app=ProxyFix(flask_app.wsgi_app)

  • 共有1个答案

    子车安和
    2023-03-14

    initialize_app中的所有内容都是wsgi服务器不可见的,这将起作用

    import logging.config
    
    import settings
    import utils
    from flask import Flask, Blueprint
    from flask_restplus import Resource, Api
    from flask_cors import CORS
    from api.restplus import api
    from api.gan.endpoints.client import ns as gan_client_namespace
    
    # create Flask application
    app = Flask(__name__)
    CORS(app) # needed for cross-domain requests, allow everything by default
    
    # load logging confoguration and create log object
    logging.config.fileConfig('logging.conf')
    log = logging.getLogger(__name__)
    
    # 
    @app.route("/")
    def hello():
        return "Hello World!"
    
    server_name = utils.get_env_var_setting('FLASK_SERVER_NAME', settings.DEFAULT_FLASK_SERVER_NAME)
    server_port = utils.get_env_var_setting('FLASK_SERVER_PORT', settings.DEFAULT_FLASK_SERVER_PORT)
    
    flask_debug = utils.get_env_var_setting('FLASK_DEBUG', settings.DEFAULT_FLASK_DEBUG)
    flask_debug = True if flask_debug == '1' else False
    
    
    app.config['SERVER_NAME'] = server_name + ':' + server_port
    app.config['SWAGGER_UI_DOC_EXPANSION'] = settings.RESTPLUS_SWAGGER_UI_DOC_EXPANSION
    app.config['RESTPLUS_VALIDATE'] = settings.RESTPLUS_VALIDATE
    app.config['RESTPLUS_MASK_SWAGGER'] = settings.RESTPLUS_MASK_SWAGGER
    app.config['ERROR_404_HELP'] = settings.RESTPLUS_ERROR_404_HELP
    
    blueprint = Blueprint('tf_api', __name__, url_prefix='/tf_api')
    
    api.init_app(blueprint)
    api.add_namespace(gan_client_namespace)
    
    flask_app.register_blueprint(blueprint)
    
    
    def main():
        log.info(
            '>>>>> Starting TF Serving client at http://{}/ >>>>>'.format(app.config['SERVER_NAME'])
            )
        app.run(debug=flask_debug, host=server_name)
    
    if __name__ == '__main__':
        main()
    
     类似资料:
    • 我有一个用TestNG运行的简单代码,但是我不能用Gradle运行,因为它说没有找到主方法,这并不奇怪,因为我使用注释。 但在这种情况下,如果必须使用Gradle,如何运行代码。 请注意,我对Gradle很陌生,对这方面的知识不多。 代码: 上面的代码与TestNG库完美运行。然而不是格拉德尔。 以下是我的Gradle构建设置: Gradle返回没有Main方法。 谢谢你的帮助。

    • 我想用Axis2构建一个客户端(只是一个客户端)。我使用Maven和OSGi(Felix)。我使用Maven成功地安装了它,但是当我使用PAX provision运行它时,出现了一系列错误。这是我在POM中的初始配置(加上AXIOM和WSDL4j的更多依赖项)。 这很好,但当我做pax:provision时 错误:Bundle axis2-transport-local[33]错误启动文件:bun

    • 如果将Xmx设置为967或更高的值,则无法运行java。 C:\documents and settings\salesforce>java-xmx967m-VM初始化时发生版本错误,无法为对象堆预留足够的空间。错误:无法创建Java虚拟机。错误:发生致命异常。程序将退出。 在执行命令之前,有3GB的ram可用(任务管理器)。 环境: Java 1.7.0_25 32bits Windows se

    • 我遵循了这些指示。这就是JDK和JavaFX的位置: VM参数为: 请帮助识别和整改问题。(我尝试了以下建议的几种方法,但似乎没有任何效果。)

    • 谢谢你的任何提示或帮助。

    • 问题内容: 我正在尝试运行Python工作。我创建了以下文件夹: C:\ Users \ herod \ jenkins_ws \ workspace \ window_testing 并添加了脚本“ testing.py”。 该脚本非常简单: 但是从Jenkins运行它时出现以下错误(如果我从命令行运行它会起作用): 我究竟做错了什么 ? 这是我尝试过的: 在构建部分的作业配置中,我选择“执行p