#!/usr/bin/env bash # 本地开发启动脚本:监听 0.0.0.0(真机局域网 / adb reverse 都能连),改代码自动重启。 # # 前置(首次):先激活装好依赖的环境,例如: # conda activate price && pip install -e . # 真机联调流程见前台 local.properties 的 debug.api.host。 set -e cd "$(dirname "$0")" if [ ! -f .env ]; then echo "❌ 缺 .env:先 cp .env.example .env 并填值(至少 JWT_SECRET_KEY;测美团再填 MT_CPS_*)" exit 1 fi mkdir -p data # sqlite 文件所在目录 alembic upgrade head # 确保表已建(幂等,已是最新则 no-op) # 默认不开 --reload:Windows 下 --reload 会同时跑 reloader 主进程 + worker 两个进程, # 二者都持有 logs/app-server.log 的 RotatingFileHandler,轮转(rename)时文件被占用 → # WinError 32 刷屏(Linux 的 rename 宽松不会炸,故仅 Windows 受影响);且 watchfiles 监控 # logs 目录会自我放大。需要热重载(建议仅 Linux/Mac)用:RELOAD=1 ./run.sh if [ "${RELOAD:-0}" = "1" ]; then # 只监控 app 目录,避免再监控 logs/ 触发上述放大 exec uvicorn app.main:app --host 0.0.0.0 --port 8770 --reload --reload-dir app else exec uvicorn app.main:app --host 0.0.0.0 --port 8770 fi