diff --git a/auth_system/db.py b/auth_system/db.py index 7f035ad..bf91867 100644 --- a/auth_system/db.py +++ b/auth_system/db.py @@ -20,7 +20,10 @@ from .security import ( ) # ============ 路径与常量 ============ -DATA_DIR = Path('data') +# 必须与 core.db.DATA_DIR 用**同一条**表达式:两处指向同一个 data/site.db。 +# 此前这里写死 Path('data') 而 core 侧认 SITE_DATA_DIR——一旦运维设置该变量, +# 站点库与设置/公告库会落到两个不同文件(脑裂),且不会报错。 +DATA_DIR = Path(os.environ.get('SITE_DATA_DIR') or 'data') DB_PATH = DATA_DIR / 'site.db' diff --git a/core/db.py b/core/db.py index 3c14f6e..35dd59a 100644 --- a/core/db.py +++ b/core/db.py @@ -21,8 +21,12 @@ from typing import Any import aiosqlite -# 站点数据目录(可经环境变量覆盖,便于测试隔离) -DATA_DIR = Path(os.environ.get('SITE_DATA_DIR', 'data')) +# 站点数据目录(可经环境变量覆盖,便于测试隔离)。 +# 用 `or 'data'` 而不是 get 的默认值:get 的默认只在变量**缺失**时生效, +# 而 `SITE_DATA_DIR=`(空串)会让 Path('') 退化成当前工作目录, +# 数据库静默落到 CWD 而不是 data/。 +# 注意:auth_system.db.DATA_DIR 必须与此处保持同一条表达式(两者指向同一个库) +DATA_DIR = Path(os.environ.get('SITE_DATA_DIR') or 'data') DB_PATH = DATA_DIR / 'site.db' # 锁按事件循环隔离:asyncio.Lock 绑定创建它的 loop,跨 loop 复用会抛