fix: config.py .env 路径修复(从 cwd 漂移改为 __file__ 定位)+ 手工读取 env 替代 pydantic-settings 失效问题
This commit is contained in:
+25
-14
@@ -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()
|
||||
settings = Settings()
|
||||
|
||||
Reference in New Issue
Block a user