__call __ () ไม่มีอาร์กิวเมนต์ตำแหน่งที่ต้องการ 1 รายการ: "ส่ง" FastAPI บน App Engine

Aug 15 2020

เมื่อพยายามโฮสต์ API บน App Engine ข้อผิดพลาดต่อไปนี้ยังคงเกิดขึ้น โปรแกรมเคยทำงานบน Flask ซึ่งทำงานได้ แต่ช้ามาก

ข้อผิดพลาด:

"Traceback (most recent call last):
  File "/env/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
    self.handle_request(listener, req, client, addr)
  File "/env/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
TypeError: __call__() missing 1 required positional argument: 'send'
"

ไฟล์ Docker:

FROM gcr.io/google_appengine/python

RUN apt-get update && apt-get install -y ffmpeg

# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.

RUN virtualenv /env -p python3.7

# Setting these environment variables are the same as running
# source /env/bin/activate.

ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

# Add the application source code.

ADD . /app

CMD gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app

app.yaml

runtime: custom
env: flex
entrypoint: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
service: encoder

runtime_config:
  python_version: 3

handlers:

- url: /.*
  script: auto

คำตอบ

1 DustinIngram Aug 18 2020 at 01:36

App Engine ต้องของmain.pyแฟ้มการประกาศappตัวแปรซึ่งสอดคล้องกับการประยุกต์ใช้ WSGI

เนื่องจาก FastAPI เป็นเว็บเฟรมเวิร์กแบบอะซิงโครนัสจึงเข้ากันไม่ได้กับ WSGI (ซึ่งเป็นแบบซิงโครนัส)

ตัวเลือกที่ดีที่สุดของคุณคือใช้บริการเช่นCloud Runซึ่งจะช่วยให้คุณกำหนดรันไทม์ของคุณเองและใช้เซิร์ฟเวอร์ HTTP แบบอะซิงโครนัสที่เข้ากันได้กับ FastAPI