Files
lsky-pro-docker/tools
mole404 3b74c8aae8 fix(entrypoint): pending 判定不走 Laravel(坏/外来的配置缓存会打死 artisan)
CI 第一次跑这个特性时红了,根因是一个真实存在的坑:
站点自己的 bootstrap/cache/config.php 一旦是坏的或外来的(CI 真升级用例里那个
**故意写坏**的哨兵文件就是),任何 artisan 命令都会报
`Target class [files] does not exist` —— 于是 migrate:status 读不到任何东西,
pending 被误判成 0,自动迁移静默不发生。

改法:SQLite 的 pending 判定改成**纯只读 PDO** 比对「盘上迁移文件」vs「记账表里的
行」,完全不经过 Laravel(连配置缓存都不读),因此对坏缓存免疫;其它数据库(MySQL /
Postgres)仍走 migrate:status(那类站点不会有本地 config 缓存文件这回事)。

顺带在 CI 用例的 4b 段里把那个哨兵配置缓存挪开:真站点的配置缓存要么不存在、
要么是有效的;它在前面那段是用来验证「同步不许覆盖站点自己的配置缓存」的,
两种用途不能混在一个卷上。

本机实测(拿生产库只读副本造的真 v2.1 卷,409 张图):
  · 干净卷 → 自动补 2 个迁移文件 + 检测到 2 条 pending + 备份 + 两张表 DONE,
    数据行指纹与升级前**逐字节一致**,容器退出码 0
  · 坏配置缓存仍在时 → 迁移如实报错、只打警告,容器照常启动(退出码 0)
  · 表在但记账行被删的半迁移状态 → 同样只警告不崩,下次启动自动重试
2026-10-02 17:20:44 +08:00
..