Как исправить ошибку приложения FastAPI на Apache WSGI?

I am trying to run FastAPI application on Apache running server.

I have configured Apache virtual host file accordingly
<VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName fastapi.example.com
        ServerAlias fastapi.example.com
        DocumentRoot /var/www/fastapi
        ErrorLog ${APACHE_LOG_DIR}/fastapi_error.log
        CustomLog ${APACHE_LOG_DIR}/fastapi_access.log combined
        WSGIScriptAlias / /var/www/fastapi/main.wsgi
        <Directory "/var/www/fastapi">
                AllowOverride All
        </Directory>
</VirtualHost>

и создал файлы main.wsgi и main.py.

main.wsgi

#! /usr/bin/python3.7

import logging
import sys
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/var/www/fastapi/')
from main import app as application
application.secret_key = 'alibaba'

main.py

from typing import Optional
from fastapi import FastAPI
app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

Когда я пытаюсь получить доступ к Интернету, я получил внутреннюю ошибку сервера 500 со следующим журналом в fastapi_access.log

mod_wsgi (pid=24946): Exception occurred processing WSGI script '/var/www/fastapi/main.wsgi'.
TypeError: __call__() missing 1 required positional argument: 'send'

Не могли бы вы посоветовать, как я могу решить эту проблему и что я делаю не так?

Thanks in advance.


person ussrback    schedule 26.07.2020    source источник


Ответы (1)


Серверы WSGI несовместимы с FastAPI, FastAPI работает только на сервере ASGI, gunicorn, а все другие серверы WSGI просто внедряют стандарты PEP с рабочими ASGI в глубину, они по-прежнему работают как ASGI с рабочими.

person Yagiz Degirmenci    schedule 26.07.2020
comment
Итак, есть ли какое-нибудь решение для запуска uvicorn с виртуальными хостами? - person ussrback; 26.07.2020
comment
Это помогает? Маршрутизация для хостов и субдоменов - person Yagiz Degirmenci; 26.07.2020