fix(compose): 补齐自动化与 P0/P2 的环境变量透传,并放宽部署等待窗口
部署 P1a 时发现两个问题: 一、compose 的 environment 是显式列表(不是 env_file),只写进 .env 不会传进 容器。于是 .env 里新加的 AUTOMATION_ENABLED=true 容器查不到,日志照旧打印 「AUTOMATION_ENABLED 未开启,自动化调度器不启动」——调度器根本没起。早先 §15.1 写入的 ORDER_SITE_* 与 OSS_* 也是同样情况,P0/P2 会直接踩到。 补齐 9 个变量的透传:AUTOMATION_ENABLED、ORDER_SITE_DATABASE_URL / LOOKUP_ENABLED / LOOKUP_TIMEOUT_SECONDS、OSS_ENDPOINT / BUCKET / ACCESS_KEY_ID / ACCESS_KEY_SECRET / PREFIX,全部带默认值(缺省即关闭或空), 不配置也不会让容器起不来。 二、deploy.sh 只等 15×2=30 秒就判「服务启动超时」,而 mysql 一起重建时应用 就绪约 35 秒,于是部署实际成功却报失败。等待窗口放宽到 40×2=80 秒。 规划附录 C.2 记下这条约定:新增环境变量要同时改 .env(实值)、 docker-compose.yml(透传)、.env.example(留档)三处。
This commit is contained in:
@@ -107,7 +107,8 @@ cmd_deploy() {
|
||||
echo "等待服务启动..."
|
||||
|
||||
# 健康检查
|
||||
for i in $(seq 1 15); do
|
||||
# 30 秒不够:mysql 一起重建时应用就绪约 35 秒,会误报「启动超时」。
|
||||
for i in $(seq 1 40); do
|
||||
if curl -s "http://localhost:${APP_PORT}/api/health" | grep -q "ok" 2>/dev/null; then
|
||||
echo ""
|
||||
echo "=============================="
|
||||
@@ -124,7 +125,7 @@ cmd_deploy() {
|
||||
echo "=============================="
|
||||
exit 0
|
||||
fi
|
||||
echo " 等待中... ($i/15)"
|
||||
echo " 等待中... ($i/40)"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
|
||||
@@ -61,6 +61,20 @@ services:
|
||||
- MAIL_ROUNDCUBE_URL=${MAIL_ROUNDCUBE_URL:-}
|
||||
# 生产容器禁止 reload;开发环境由 dev.sh 单独启动 reload。
|
||||
- UVICORN_RELOAD=false
|
||||
# 自动化调度(见 docs/自动化与资料收集规划.md §7)。
|
||||
# 这个开关只决定「是否起调度线程」;各作业还有自己的开关,默认关闭,
|
||||
# 在 /automation 页面打开。
|
||||
- AUTOMATION_ENABLED=${AUTOMATION_ENABLED:-false}
|
||||
# order_site 订单只读库(P0 订单读取适配层用;未配置时适配层整体降级)
|
||||
- ORDER_SITE_DATABASE_URL=${ORDER_SITE_DATABASE_URL:-}
|
||||
- ORDER_SITE_LOOKUP_ENABLED=${ORDER_SITE_LOOKUP_ENABLED:-false}
|
||||
- ORDER_SITE_LOOKUP_TIMEOUT_SECONDS=${ORDER_SITE_LOOKUP_TIMEOUT_SECONDS:-3}
|
||||
# 用户上传图片的 OSS(P2 资料收集用)
|
||||
- OSS_ENDPOINT=${OSS_ENDPOINT:-}
|
||||
- OSS_BUCKET=${OSS_BUCKET:-}
|
||||
- OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID:-}
|
||||
- OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET:-}
|
||||
- OSS_PREFIX=${OSS_PREFIX:-collect}
|
||||
networks:
|
||||
- default
|
||||
- order-site-net
|
||||
|
||||
@@ -1171,6 +1171,11 @@ OSS_PREFIX=collect
|
||||
- **纯函数优先**:匹配打分、别名归一、365 天判定、订单号归一、模板必填校验都做成纯函数重点覆盖;
|
||||
- **写操作不进自动回归**:兑换/重登/支付用 mock 客户端做契约测试(沿用 `tests/test_douyu_write_path_contracts.py`);
|
||||
- 提交门禁:pre-commit 跑 `ruff format --check`(仅暂存文件)+ `tsc -b`;pre-push 跑全量 pytest;
|
||||
- **新增环境变量必须同步改 `docker-compose.yml`**:本项目的 compose 用的是
|
||||
`environment:` **显式列表**(不是 `env_file`),只写进 `.env` **不会传进容器**。
|
||||
P1a 踩过一次:`.env` 加了 `AUTOMATION_ENABLED=true`,容器里查不到,调度器照旧不启动;
|
||||
早先 §15.1 写入的 `ORDER_SITE_*` 与 `OSS_*` 同样没生效。新增变量时三处都要动:
|
||||
`.env`(服务器实值)+ `docker-compose.yml`(透传)+ `.env.example`(留档);
|
||||
- **DB 读出来的时间是 naive UTC**:`datetime` 列取回后不带时区,直接和 `datetime.now(UTC)` 比较会
|
||||
`TypeError: can't compare offset-naive and offset-aware`(P1a 踩过一次)。比较前一律用
|
||||
`_as_utc()`(`services/yyb_service.py` 与 `services/automation/scheduler.py` 各有一份)补时区。
|
||||
|
||||
Reference in New Issue
Block a user