main.py
1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import os
from pathlib import Path
os.environ['PROJECT_ROOT'] = Path(__file__).parent.absolute().as_posix()
from aabd.base.patched_logging import set_global_logger, get_logger
set_global_logger()
logger = get_logger(__name__)
from contextlib import asynccontextmanager
from typing import AsyncGenerator
from fastapi import FastAPI
from api.http_config import config_fastapi
from config import settings
from db import connect as db_client_connect, disconnect as db_client_disconnect
@asynccontextmanager
async def lifespan(fastapi_app: FastAPI) -> AsyncGenerator[None, None]:
"""应用生命周期管理."""
# 启动时建立数据库连接
try:
await db_client_connect()
logger.info(f"✓ database connected")
except Exception as e:
logger.error(f"✗ Failed to connect to database: {e}")
raise
yield
# 关闭时断开数据库连接
try:
await db_client_disconnect()
logger.info(f"✓ database disconnected")
except Exception as e:
logger.error(f"✗ Error disconnecting from database: {e}")
# 创建应用实例
app = FastAPI(
title=settings.app_name,
version=settings.app_version,
description="基于向量的CRUD服务,支持多种Embedding场景",
lifespan=lifespan,
docs_url="/docs",
redoc_url="/redoc",
)
config_fastapi(app)
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"main:app",
host='0.0.0.0',
port=settings.port,
reload=settings.debug,
log_config=None
)