fix: 回归脚本 Windows 可用 + 加"禁止对生产库跑"安全闸;迁移脚本去掉 GBK 控制台会崩的符号
- scripts/regression_test.py:
* signal.alarm 加 hasattr 守卫(Windows 上直接 AttributeError 退出,
backlog A4)→ 本机终于能跑"一条命令扫全接口 500"
* 新增安全闸:.env 声明 prod、或目标库 app_meta.deployment_env=prod 时
**拒绝运行**(exit 3)。本脚本会发真实写请求(设备池增删/剪贴板注入/
亮灭屏),跑在生产配置上就是拿正式数据做实验
- scripts/migrate_sqlite_to_mysql.py: stdout 重设为 UTF-8 并去掉 ✔/✘ 符号。
实测在 GBK 控制台里打印 ✔ 会抛 UnicodeEncodeError,而且崩在"写库标签"之前,
看起来像迁移失败(数据其实已搬完)
- doc/backlog/TODO.md: A4 移入已完成;gitignore 条目更新(mcp_audit.log 已补,
uiauto.pid 仍缺);登记 MySQL 迁移与回归安全闸
实测(对 192.168.2.27 的 auto_control_dev):数据迁移 12 张表逐表 SHA-256 一致;
应用直连 MySQL 全部接口 200,设备名/指纹唯一索引语义与 SQLite 一致(空值可重复、
非空重复被拦、大小写敏感 A08≠a08);备份导出→预览→应用往返正常。
This commit is contained in:
@@ -40,6 +40,14 @@ import uuid
|
||||
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
sys.path.insert(0, ROOT)
|
||||
|
||||
# Windows 控制台默认 GBK,输出里带 ✔ 之类的符号会直接抛 UnicodeEncodeError
|
||||
# (本脚本是运维在终端里手跑的,崩在最后一步会让人以为迁移失败)
|
||||
try:
|
||||
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
||||
sys.stderr.reconfigure(encoding="utf-8", errors="replace")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
from sqlalchemy import inspect as sa_inspect, text as sa_text # noqa: E402
|
||||
|
||||
|
||||
@@ -306,7 +314,7 @@ def main():
|
||||
with app.app_context():
|
||||
stats, ok = copy_and_verify(args.sqlite, tables, "verify")
|
||||
print_stats(stats)
|
||||
print("\n校验结果: " + ("全部一致 ✔" if ok else "存在不一致 ✘"))
|
||||
print("\n校验结果: " + ("全部一致 OK" if ok else "存在不一致 FAIL"))
|
||||
sys.exit(0 if ok else 1)
|
||||
|
||||
# 目标库环境标签检查(防止误把 dev 数据灌进生产库)
|
||||
@@ -331,7 +339,7 @@ def main():
|
||||
print_stats(stats)
|
||||
if not ok:
|
||||
_fail("搬运后校验不一致 —— 事务已回滚,目标库保持原样。请把上面的表格发给我排查")
|
||||
print(f"\n搬运完成,用时 {time.time() - t0:.1f}s,逐表校验一致 ✔")
|
||||
print(f"\n搬运完成,用时 {time.time() - t0:.1f}s,逐表校验一致 OK")
|
||||
|
||||
# 4) 写库标签与版本
|
||||
src = sqlite3.connect(_readonly_uri(args.sqlite), uri=True)
|
||||
|
||||
Reference in New Issue
Block a user