apache2 - 如何修复 Apache WSGI 上的 FastAPI 应用程序错误?
问题描述
我正在尝试在运行 Apache 的服务器上运行 FastAPI 应用程序。 我已经相应地配置了 Apache 虚拟主机文件<VirtualHost *:80>
ServerAdmin admin@example.com
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 文件。
主文件
#! /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'
主文件
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'
你能否请教,我该如何解决这个问题,我做错了什么?
提前致谢。解决方案
WSGI 服务器与 FastAPI 不兼容,FastAPI 仅在 ASGI 服务器中运行,gunicorn 和所有其他 WSGI 服务器仅与 ASGI 工作人员深度实现 PEP 标准,它们仍然与工作人员一起作为 ASGI 工作。
推荐阅读
- javascript - 当我将 setTimeout 的结果分配给变量时,即使我不调用我的变量,setTimeout 中的函数如何运行?
- node.js - UnhandledPromiseRejectionWarning: TypeError: Channel credentials must be a ChannelCredentials object in GCP Batch publishing
- javascript - Pug 增加数字 'inside' 数组名
- python - 时间数据 '09-01-2014 00:01' 与格式 '%m/%d/%Y %H:%M:%S' 不匹配(匹配)
- javascript - 反应如何根据多个键过滤地图功能
- reactjs - 如何将十进制字符 (.) 更改为 (,)
- azure - 物联网工业无云架构
- c# - 遍历 Blazor 中的 IJSObjectReference
- java - 如何在安装程序运行时计算建议的安装目录?
- ios - 如何为 UIBarButtonItem 添加背景颜色?