From 1179246f2d556eb7377106dd59dfc1bf7c4dcb37 Mon Sep 17 00:00:00 2001 From: simonkoson <28867558@qq.com> Date: Thu, 14 May 2026 14:06:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20config.py=20.env=20=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D(=E4=BB=8E=20cwd=20=E6=BC=82=E7=A7=BB?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=20=5F=5Ffile=5F=5F=20=E5=AE=9A=E4=BD=8D)+=20?= =?UTF-8?q?=E6=89=8B=E5=B7=A5=E8=AF=BB=E5=8F=96=20env=20=E6=9B=BF=E4=BB=A3?= =?UTF-8?q?=20pydantic-settings=20=E5=A4=B1=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/core/config.py | 39 ++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/backend/app/core/config.py b/backend/app/core/config.py index f7f4487..65258cb 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -1,19 +1,30 @@ """ -应用配置 — 用 pydantic-settings 的 BaseSettings 读取 .env +应用配置 — 手动从 .env 读取,不依赖 pydantic-settings 自动 env_file """ -from pydantic_settings import BaseSettings +import os +from pathlib import Path +from dotenv import load_dotenv + +# 强制加载 backend/.env 到 os.environ(用 __file__ 定位脚本所在目录,避免 cwd 漂移) +# __file__ = e:\tps-dashboard\backend\app\core\config.py → parent.parent.parent = e:\tps-dashboard\backend +_env_path = Path(__file__).parent.parent.parent / ".env" +load_dotenv(str(_env_path), override=True) + +# 直接从 os.environ 读取,手动兜底 +_DATABASE_URL = os.environ.get("DATABASE_URL") +_SECRET_KEY = os.environ.get("SECRET_KEY", "change-me-to-a-random-string-in-production") +_SESSION_MAX_AGE = int(os.environ.get("SESSION_MAX_AGE", "86400")) + +# 验证必需配置 +if not _DATABASE_URL: + raise RuntimeError(f"[config] DATABASE_URL 未设置。请检查 {_env_path} 是否存在且内容正确。") + +# 简单命名空间对象(替代 pydantic-settings,避免 env 读取失效) +class Settings: + DATABASE_URL: str = _DATABASE_URL + SECRET_KEY: str = _SECRET_KEY + SESSION_MAX_AGE: int = _SESSION_MAX_AGE -class Settings(BaseSettings): - DATABASE_URL: str - SECRET_KEY: str = "change-me-to-a-random-string-in-production" - SESSION_MAX_AGE: int = 86400 # 秒,默认 1 天 - - model_config = { - "env_file": ".env", - "env_file_encoding": "utf-8", - } - - -settings = Settings() \ No newline at end of file +settings = Settings()