【问题标题】:failed to run the server that generated by swagger codegenswagger codegen 生成的服务器运行失败
【发布时间】:2020-04-16 21:16:40
【问题描述】:

我正在学习为机器学习服务开发 restful api。我使用 openapi 规范来定义我的 api 规范,并尝试为此使用烧瓶休息。但是,我发现this medium post 与我的意图相关,所以我下载了源代码并尝试在本地运行服务器,但服务器端点失败。我可以在同一个端点上运行我的其他烧瓶应用程序,但是即使我按照它的说明进行操作,这个项目也无法正常工作。我创建了我的open api spec 文件,所以我想通过在本地运行服务器来学习和理解this medium post。谁能指出我发生了什么this medium post source code?任何快速解决方案来弄清楚如何在本地运行服务器?谢谢

对我来说,一个简单的烧瓶应用程序可以工作并且可以在服务器端点上运行它。

from flask import Flask
app = Flask(__name__)


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

if __name__ == '__main__':
    app.run()

我想从这个APIs with OpenAPI 运行服务器,因为我想使用相同的结构来开发我的 api。谁能指出我为什么不能运行服务器?有什么想法吗?

更新

this medium post 中,所有工件均由 openapi 代码生成器生成,并由 openapi 规范文件结构化,因此能够从其源代码运行服务器将帮助我了解如何继续我的工作流程。

【问题讨论】:

    标签: python api flask openapi


    【解决方案1】:

    您提到的存储库中的示例带有 docker 文件。您可以使用 Docker 快速启动服务器。

    cd api_tutorial/openapi/photo_album/codegen_server
    docker build . -t codegen_server
    docker run codegen_server
    

    但是,这不起作用。

    Traceback (most recent call last):
      File "/usr/local/lib/python3.8/runpy.py", line 193, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "/usr/local/lib/python3.8/runpy.py", line 86, in _run_code
        exec(code, run_globals)
      File "/usr/src/app/openapi_server/__main__.py", line 3, in <module>
        import connexion
      File "/usr/local/lib/python3.8/site-packages/connexion/__init__.py", line 3, in <module>
        from .apis import AbstractAPI  # NOQA
      File "/usr/local/lib/python3.8/site-packages/connexion/apis/__init__.py", line 1, in <module>
        from .abstract import AbstractAPI  # NOQA
      File "/usr/local/lib/python3.8/site-packages/connexion/apis/abstract.py", line 16, in <module>
        from ..operations import OpenAPIOperation, Swagger2Operation
      File "/usr/local/lib/python3.8/site-packages/connexion/operations/__init__.py", line 1, in <module>
        from .abstract import AbstractOperation  # noqa
      File "/usr/local/lib/python3.8/site-packages/connexion/operations/abstract.py", line 11, in <module>
        from ..decorators.response import ResponseValidator
      File "/usr/local/lib/python3.8/site-packages/connexion/decorators/response.py", line 12, in <module>
        from .validation import ResponseBodyValidator
      File "/usr/local/lib/python3.8/site-packages/connexion/decorators/validation.py", line 9, in <module>
        from werkzeug import FileStorage
    ImportError: cannot import name 'FileStorage' from 'werkzeug' (/usr/local/lib/python3.8/site-packages/werkzeug/__init__.py)
    

    正如this Github 问题中所指出的,此问题与connexion 有关,不会发生在版本2.6.0 中。所以,让我们更新requirements.txt 以改用这个版本。

    connexion == 2.6.0
    

    使用 docker 再次构建并运行,它应该可以工作了。

    docker run codegen_server
     * Serving Flask app "__main__" (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: off
     * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
    

    你也可以在没有 Docker 的情况下运行服务器,方法是 cd-ing 进入根目录并执行。

    python -m openapi_server
    

    事实上,这正是 docker 所做的,正如我们在 Dockerfile 中看到的那样。

    ...
    
    ENTRYPOINT ["python3"]
    CMD ["-m", "openapi_server"]
    

    【讨论】:

    • 为什么我仍然有同样的错误?你能和我分享一个可行的源代码,这样我就可以成功运行了吗?谢谢
    • pip freeze | grep connexion 返回什么?你可能还有旧版本的connexion。如果是这样,请使用 pip install -U connexion==2.6.0 将其升级到 2.6.0
    • 您是否更新了requirements.txt 以将connexion == 2.0.0 更改为connexion == 2.6.0?你用docker build再次构建了docker镜像吗?
    • 是的,我安装了 connexion==2.6.0,但仍然无法正常工作。在这里,我将pip freeze 的尝试和输出粘贴到this gist 上。如果可能的话,你能把可行的源代码发邮件给我吗?在没有任何服务器端点失败错误之前,我想接受答案。谢谢
    • 啊!您在 Windows 上,这就是 grep 不起作用的原因。无论哪种方式,pip freeze 都向我们表明您安装了正确版本的connexion。我唯一改变的是requirements.txt¯_(ツ)_/¯
    猜你喜欢
    • 2020-07-27
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2022-01-22
    • 2020-06-15
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多