diff --git a/qy_lty/docs/修改记录.md b/qy_lty/docs/修改记录.md index afb818d..574cb89 100644 --- a/qy_lty/docs/修改记录.md +++ b/qy_lty/docs/修改记录.md @@ -23,6 +23,25 @@ +### [2026-05-18] 修复线上 Pod CrashLoopBackOff — settings.py 中 tencent audio key 缺 default 导致 Django 启动炸 + +通过 SSH 登测试服 k3s 排查发现 deploy 后新 Pod 全部 CrashLoopBackOff,老 Pod(4 天前镜像,env 仍是阿里云 Redis)因新 Pod 不 ready 未被替换,外部观感即"推到远端仍连阿里云 Redis"。Pod 日志显示 Django settings import 阶段抛 `decouple.UndefinedValueError: AUDIO_SERVICE_TENCENT_API_KEY not found`。 + +- **文件路径**: + - `qy_lty/settings.py`(**修改** — 第 441/442 行) +- **修改类型**: 修复Bug +- **修改内容**: + - `config('AUDIO_SERVICE_TENCENT_API_KEY')` → `config('AUDIO_SERVICE_TENCENT_API_KEY', default='')` + - `config('AUDIO_SERVICE_TENCENT_API_SECRET')` → `config('AUDIO_SERVICE_TENCENT_API_SECRET', default='')` +- **修改原因**: + - `AUDIO_SERVICE_CONFIG` 是顶层求值的 dict,即使 `AUDIO_SERVICE_PROVIDER='huoshan'` 不走 tencent 分支,`config()` 没 default 时缺环境变量也会让整个 settings 模块 import 失败 + - 本地 `qy_lty/.env` 里有空值 `AUDIO_SERVICE_TENCENT_API_KEY=` 兜底,所以本地正常;commit a9d00a4 把 `.env` 从 Git 取消跟踪后 CI 构建出的镜像里没有 `.env`,K8s yaml 又没声明这两个 key,差异第一次被放大 +- **根因链**: 新 Pod 因缺 env 崩 → readiness 失败 → 老 Pod 未被滚动替换 → 老 Pod 的 REDIS_LOCATION 还是阿里云旧值(验证:`kubectl get pod -o jsonpath='{.spec.containers[0].env...}'` 显示 `redis://r-7xvat0vez5clwbzk5vpd...aliyuncs.com`,新 Pod 显示火山 URL 已正确注入) +- **验证**: push 触发 CI 后 `kubectl get pods -l app=lty-backend` 应只剩新 Pod 且 Running,老 `lty-backend-664c5d6888-*` 自动下线 +- **后续防护建议(未做)**: 把 `AUDIO_SERVICE_CONFIG` 改为 lazy 求值(按 provider 解析),或所有非 active provider 的 `config()` 全部加 default,避免同类问题再现 + +--- + ### [2026-05-18] k8s yaml 与 deploy.yaml sed 源串同步为火山 Redis(消除"yaml 与实际部署不一致") 承接同日 CI deploy.yaml 切换条目,原 k8s/backend-deployment-prod.yaml 里 REDIS_LOCATION/REDIS_PASSWORD 仍是阿里云旧值(作为 sed 的"被替换源占位"),导致直接读 yaml 容易误以为线上跑的是阿里云。本次把 k8s yaml 字面值与 deploy.yaml sed 源串**同步**切到火山,使 yaml 静态读起来即真实部署状态。 diff --git a/qy_lty/qy_lty/settings.py b/qy_lty/qy_lty/settings.py index c8129e1..055cfd6 100644 --- a/qy_lty/qy_lty/settings.py +++ b/qy_lty/qy_lty/settings.py @@ -438,8 +438,8 @@ AUDIO_SERVICE_CONFIG = { 'oss_audio_base_dir': config('ALIYUN_OSS_AUDIO_BASE_DIR') }, 'tencent': { - 'api_key': config('AUDIO_SERVICE_TENCENT_API_KEY'), - 'api_secret': config('AUDIO_SERVICE_TENCENT_API_SECRET') + 'api_key': config('AUDIO_SERVICE_TENCENT_API_KEY', default=''), + 'api_secret': config('AUDIO_SERVICE_TENCENT_API_SECRET', default='') }, 'huoshan': { 'appid': config('AUDIO_SERVICE_HUOSHAN_APPID'),