fix(update): 在重启 bugcollect-service 前执行 schema 预检和自动修复
避免因 Flyway 迁移 no-op 类问题导致服务启动失败、只能登录服务器手工操作的情况。 新增启动前 schema 预检步骤,使用条件 SQL 检查并补全已知缺失列(build_id), 后续新增迁移问题时可在同一位置追加检查项。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
父节点
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" \
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户