fix(settings): tencent audio config 缺 default 导致 Pod CrashLoopBackOff
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 8m49s
All checks were successful
Build and Deploy LTY / build-and-deploy (push) Successful in 8m49s
AUDIO_SERVICE_CONFIG 顶层求值,即使 provider='huoshan' 不走 tencent, config() 缺 default 也会让 settings 整体 import 失败。本地 .env 有空值 兜底所以本地正常;a9d00a4 取消跟踪 .env 后 CI 镜像无兜底,新 Pod 全崩, 老 Pod 因新 Pod 不 ready 未被滚动替换,外部观感即"仍连旧阿里云 Redis"。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
94f31ad699
commit
a6a8d64fd4
@ -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 <old-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 与实际部署不一致")
|
### [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 静态读起来即真实部署状态。
|
承接同日 CI deploy.yaml 切换条目,原 k8s/backend-deployment-prod.yaml 里 REDIS_LOCATION/REDIS_PASSWORD 仍是阿里云旧值(作为 sed 的"被替换源占位"),导致直接读 yaml 容易误以为线上跑的是阿里云。本次把 k8s yaml 字面值与 deploy.yaml sed 源串**同步**切到火山,使 yaml 静态读起来即真实部署状态。
|
||||||
|
|||||||
@ -438,8 +438,8 @@ AUDIO_SERVICE_CONFIG = {
|
|||||||
'oss_audio_base_dir': config('ALIYUN_OSS_AUDIO_BASE_DIR')
|
'oss_audio_base_dir': config('ALIYUN_OSS_AUDIO_BASE_DIR')
|
||||||
},
|
},
|
||||||
'tencent': {
|
'tencent': {
|
||||||
'api_key': config('AUDIO_SERVICE_TENCENT_API_KEY'),
|
'api_key': config('AUDIO_SERVICE_TENCENT_API_KEY', default=''),
|
||||||
'api_secret': config('AUDIO_SERVICE_TENCENT_API_SECRET')
|
'api_secret': config('AUDIO_SERVICE_TENCENT_API_SECRET', default='')
|
||||||
},
|
},
|
||||||
'huoshan': {
|
'huoshan': {
|
||||||
'appid': config('AUDIO_SERVICE_HUOSHAN_APPID'),
|
'appid': config('AUDIO_SERVICE_HUOSHAN_APPID'),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user