diff --git a/backend/cli.py b/backend/cli.py index 257d8f05..6fac7e44 100644 --- a/backend/cli.py +++ b/backend/cli.py @@ -4,11 +4,10 @@ import os from dataclasses import dataclass -from pathlib import Path from typing import Annotated import cappa -import uvicorn +import granian from rich.panel import Panel from rich.text import Text @@ -18,6 +17,7 @@ from backend.common.enums import DataBaseType, PrimaryKeyType from backend.common.exception.errors import BaseExceptionMixin from backend.core.conf import settings +from backend.core.path_conf import BASE_PATH from backend.database.db import async_db_session from backend.plugin.tools import get_plugin_sql from backend.utils.file_ops import install_git_plugin, install_zip_plugin, parse_sql_script @@ -39,14 +39,18 @@ def run(host: str, port: int, reload: bool, workers: int | None) -> None: ) console.print(Panel(panel_content, title='fba 服务信息', border_style='purple', padding=(1, 2))) - uvicorn.run( - app='backend.main:app', - host=host, + granian.Granian( + target='backend.main:app', + interface='asgi', + address=host, port=port, reload=not reload, - reload_excludes=[os.path.abspath('.venv' if Path(Path.cwd() / '.venv').is_dir() else '../.venv')], - workers=workers, - ) + reload_ignore_paths=[ + os.path.join(BASE_PATH.parent / '.venv'), + os.path.join(BASE_PATH / 'log'), + ], + workers=workers or 1, + ).serve() async def install_plugin( diff --git a/pyproject.toml b/pyproject.toml index cc619da1..7710307d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,7 @@ dependencies = [ "fastapi[standard]==0.115.11", "flower>=2.0.0", "gevent>=24.11.1", + "granian>=2.4.0", "ip2loc>=1.0.0", "itsdangerous>=2.2.0", "jinja2>=3.1.4", @@ -62,7 +63,6 @@ lint = [ ] server = [ "aio-pika>=9.4.3", - "granian>=2.4.0", "wait-for-it>=2.2.2", ] diff --git a/requirements.txt b/requirements.txt index 341874f8..dcfeab0c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -57,6 +57,7 @@ click==8.1.8 # click-didyoumean # click-plugins # click-repl + # granian # typer # uvicorn click-didyoumean==0.3.1 @@ -106,6 +107,8 @@ flower==2.0.1 # via fastapi-best-architecture gevent==24.11.1 # via fastapi-best-architecture +granian==2.4.0 + # via fastapi-best-architecture greenlet==3.1.1 # via # gevent diff --git a/uv.lock b/uv.lock index b98cacc4..fb8c6421 100644 --- a/uv.lock +++ b/uv.lock @@ -662,6 +662,7 @@ dependencies = [ { name = "fastapi-pagination" }, { name = "flower" }, { name = "gevent" }, + { name = "granian" }, { name = "ip2loc" }, { name = "itsdangerous" }, { name = "jinja2" }, @@ -692,7 +693,6 @@ lint = [ ] server = [ { name = "aio-pika" }, - { name = "granian" }, { name = "wait-for-it" }, ] @@ -716,6 +716,7 @@ requires-dist = [ { name = "fastapi-pagination", specifier = ">=0.13.0" }, { name = "flower", specifier = ">=2.0.0" }, { name = "gevent", specifier = ">=24.11.1" }, + { name = "granian", specifier = ">=2.4.0" }, { name = "ip2loc", specifier = ">=1.0.0" }, { name = "itsdangerous", specifier = ">=2.2.0" }, { name = "jinja2", specifier = ">=3.1.4" }, @@ -744,7 +745,6 @@ dev = [ lint = [{ name = "pre-commit", specifier = ">=4.0.0" }] server = [ { name = "aio-pika", specifier = ">=9.4.3" }, - { name = "granian", specifier = ">=2.4.0" }, { name = "wait-for-it", specifier = ">=2.2.2" }, ]