簡體   English   中英

無法運行由 swagger codegen 生成的服務器

[英]failed to run the server that generated by swagger codegen

我正在學習為機器學習服務開發寧靜的 api。 我使用 openapi 規范來定義我的 api 規范,並為此嘗試使用 flask rest。 但是,我發現這篇中等帖子與我的意圖相關,所以我下載了源代碼並嘗試在本地運行服務器,但服務器端點失敗。 我可以在同一個端點上運行我的其他 flask 應用程序,但是即使我按照它的說明進行操作,這個項目也無法正常工作。 我創建了我的open api spec文件,所以我想通過在本地運行服務器來學習和理解這篇中型文章 誰能指出我這個中等帖子源代碼發生了什么? 任何快速解決方案來弄清楚如何在本地運行服務器? 謝謝

對我來說,一個簡單的 flask 應用程序可以工作並且可以在服務器端點上運行它。

from flask import Flask
app = Flask(__name__)


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

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

我想使用 OpenAPI 從這個 API運行服務器,因為我想使用相同的結構來開發我的 api。 誰能指出我為什么不能運行服務器? 任何想法?

更新

這篇中等文章中,所有由 openapi 代碼生成器生成的工件,並由 openapi 規范文件結構化,因此能夠從其源代碼運行服務器將幫助我了解如何繼續我的工作流程。

您提到的存儲庫中的示例帶有 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)

正如在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"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM