fix(env): 本机启动读取根目录 .env,监听地址兼容 BIND_ADDR

- study_tool/__init__.py 用 python-dotenv 加载根目录 .env,位置早于
  store / config 读环境变量;已有环境变量优先,Docker 注入的不受影响
- app.py 监听地址改为 HOST -> BIND_ADDR -> 127.0.0.1 依次回退
- 新增依赖 python-dotenv>=1.0(pyproject.toml / requirements.txt / uv.lock)
- README 环境变量表补充 .env 说明与 BIND_ADDR / TZ 两行
- CHANGELOG / docs/OPTIMIZATION.md 记录本次修复,版本号 0.0.6 -> 0.0.7
This commit is contained in:
study-tool
2026-10-31 16:12:52 +08:00
parent cfa960221e
commit 8e8d6b83f1
14 changed files with 100 additions and 50 deletions
+2
View File
@@ -37,6 +37,8 @@
- 删除账号只清了按账号 id 记的 `run_state` / `run_log`,登录日志(key 与 `login_log.username` 记的是用户名 / 手机号)残留:`account_delete()` 改为按账号 id + 用户名一起清,`DELETE /api/accounts/{id}` 同时清掉内存里两个 key 的日志
- 学习链路上三处引用未定义的全局名(`platforms/jspx.py` 的 `extract_study_token` / `StudyClient` / `save_snapshot` 等、`platforms/study.py` 的 `parse_qs`、`quiz.py` 的 `BeautifulSoup` / `urlsplit`)会让课程发现 / 答题直接 `NameError`:`parse_qs`、`BeautifulSoup`、`urlsplit` 改为模块顶部导入,`jspx` ↔ `study` 之间改用函数内延迟导入(模块级会成环)
- 服务重启留下的「已中断」状态在重新登录后仍然压在卡片上,徽标显示「已中断」并挂着旧进度和红条:登录成功后清掉该账号上一轮已结束的运行状态(内存 + SQLite),正在跑(`discovering` / `studying`)的不动,内存日志保留
- 本机启动(`python app.py` / `uv run app.py`)时根目录 `.env` 完全无效:只有 docker compose 会读它,`AUTH_TOKEN` / `PORT` / `RUN_LOG_KEEP` / `SNAPSHOT_KEEP` 都得靠命令行环境变量;现在 `study_tool/__init__.py` 用 `python-dotenv` 加载 `.env`(已存在的环境变量优先,Docker 由 compose 注入的不受影响),新增依赖 `python-dotenv>=1.0`
- `.env` 里写 `BIND_ADDR` 在本机启动时不起作用(代码只读 `HOST`):监听地址改为 `HOST` → `BIND_ADDR` → `127.0.0.1` 依次回退
### 其他