fix(update): 在重启 bugcollect-service 前执行 schema 预检和自动修复

避免因 Flyway 迁移 no-op 类问题导致服务启动失败、只能登录服务器手工操作的情况。
新增启动前 schema 预检步骤,使用条件 SQL 检查并补全已知缺失列(build_id),
后续新增迁移问题时可在同一位置追加检查项。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
徐勤民 2026-06-23 18:54:18 +08:00
父节点 2ad8e6cc13
当前提交 d353ecdb39

查看文件

@ -540,6 +540,52 @@ if grep -q 'bugcollect-service:' "$ROOT_DIR/docker-compose.yml" 2>/dev/null; the
warn "MySQL 容器未运行external 模式),请确保数据库 ${BUGCOLLECT_DB:-xuqm_bugcollect} 已存在并授权"
fi
# 启动前 schema 预检:确保 bugcollect 数据库表结构与当前服务版本一致。
# 这里显式检查已知列缺失问题,避免服务启动时因 Hibernate 校验失败而陷入
# 重启循环(只能登录服务器手工操作)。新增迁移时在此追加对应检查项。
if [ -n "$_mysql_ctr" ] && [ -n "$_mysql_root_pw" ]; then
_bc_db="${BUGCOLLECT_DB:-xuqm_bugcollect}"
info "bugcollect schema 预检 (db=${_bc_db}) ..."
_schema_repair_sql="$(cat <<'REPAIR_SQL'
-- 检查并补全 build_id 列V6 no-op 历史遗留问题)
SET @_add_lie = IF(
NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'log_issue_events'
AND column_name = 'build_id'
),
CONCAT('ALTER TABLE log_issue_events ADD COLUMN build_id VARCHAR(32) NULL ',
'COMMENT ''Build identifier for sourcemap tracking'' AFTER app_version'),
'SELECT 1'
);
PREPARE _s FROM @_add_lie; EXECUTE _s; DEALLOCATE PREPARE _s;
SET @_add_lsm = IF(
NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = 'log_sourcemaps'
AND column_name = 'build_id'
),
CONCAT('ALTER TABLE log_sourcemaps ADD COLUMN build_id VARCHAR(32) NULL ',
'COMMENT ''Build identifier for multi-build-per-version tracking'' AFTER app_version'),
'SELECT 1'
);
PREPARE _s FROM @_add_lsm; EXECUTE _s; DEALLOCATE PREPARE _s;
REPAIR_SQL
)"
_repair_err="$(docker exec "$_mysql_ctr" mysql -u root -p"${_mysql_root_pw}" \
"$_bc_db" -e "$_schema_repair_sql" 2>&1)"
if [ $? -eq 0 ]; then
ok "bugcollect schema 预检通过(已补全所有缺失列)"
else
warn "bugcollect schema 预检失败,服务启动可能报错"
warn " 错误: ${_repair_err}"
warn " 如服务启动失败,请查看: docker compose logs bugcollect-service"
fi
fi
for _svc in bugcollect-service symbolicator; do
info "应用新镜像并重启 ${_svc} ..."
COMPOSE_PROFILES=bugcollect $_COMPOSE up -d --no-deps "$_svc" \