From 60aeb61433c78f7a77801201e69abeff9bebac4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Wed, 20 May 2026 12:11:19 +0800 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20=E8=BF=81=E7=A7=BB/=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E7=A7=9F=E6=88=B7=E5=90=8E=E5=90=8C=E6=AD=A5=E5=86=99?= =?UTF-8?q?=E5=85=A5=20app=5Flicenses=EF=BC=8C=E4=BF=AE=E5=A4=8D=20license?= =?UTF-8?q?=20404?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit importData API 只写 t_tenant/t_app/t_feature_service,不写 license-service 的 app_licenses 表,导致前端 /api/license/admin/apps/:appKey 返回 404。 在 deploy.sh 的迁移和新建两个分支中,import 成功后直接对同一 MySQL 执行 INSERT ... ON DUPLICATE KEY UPDATE,为所有非系统应用补写 app_licenses 记录。 Co-Authored-By: Claude Sonnet 4.6 --- scripts/deploy.sh | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index a6ef86e..b0eee54 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -982,6 +982,23 @@ if [ "$DEPLOY_MODE" = "new" ]; then warn "租户记录暂未就绪(tenant-service 可能仍在初始化),继续部署" fi + # 为 bootstrap 创建的 app 补写 app_licenses(license-service 独立 DB 写入) + _LIC_SQL_NEW="$(mktemp /tmp/xuqm-lic-new-XXXXXX.sql)" + cat > "$_LIC_SQL_NEW" <<'LIC_SQL_NEW' +INSERT INTO app_licenses (app_key, name, max_devices, registered_devices, + expires_at, is_active, remark, created_at, updated_at) +SELECT a.app_key, a.name, 1000, 0, NULL, 1, '私有化新建', NOW(), NOW() +FROM t_app a +WHERE a.app_key != 'ak_409e217e4aa14254ad73ad3c' +ON DUPLICATE KEY UPDATE updated_at = updated_at; +LIC_SQL_NEW + docker exec -i "$MYSQL_CTR" \ + mysql -u "$MYSQL_USERNAME" -p"${MYSQL_PASSWORD}" "$MYSQL_DATABASE" \ + --default-character-set=utf8mb4 < "$_LIC_SQL_NEW" 2>/dev/null \ + && ok "app_licenses 记录已为所有应用创建" \ + || warn "app_licenses 写入遇到警告,继续" + rm -f "$_LIC_SQL_NEW" + else # ── 迁移租户:调用公有平台 export API → 私有平台 import API ── @@ -1038,6 +1055,23 @@ print(t.get('email', ''), t.get('username', '')) DEPLOY_TENANT_USERNAME=$(printf '%s' "$_TENANT_INFO" | awk '{print $2}') ok "租户 ${DEPLOY_TENANT_EMAIL} 数据已成功导入" + # 为迁移的所有 app 在 app_licenses 表创建 license 记录(license-service 独立 DB 写入) + _LIC_SQL="$(mktemp /tmp/xuqm-lic-XXXXXX.sql)" + cat > "$_LIC_SQL" <<'LIC_SQL' +INSERT INTO app_licenses (app_key, name, max_devices, registered_devices, + expires_at, is_active, remark, created_at, updated_at) +SELECT a.app_key, a.name, 1000, 0, NULL, 1, '私有化迁移', NOW(), NOW() +FROM t_app a +WHERE a.app_key != 'ak_409e217e4aa14254ad73ad3c' +ON DUPLICATE KEY UPDATE updated_at = updated_at; +LIC_SQL + docker exec -i "$MYSQL_CTR" \ + mysql -u "$MYSQL_USERNAME" -p"${MYSQL_PASSWORD}" "$MYSQL_DATABASE" \ + --default-character-set=utf8mb4 < "$_LIC_SQL" 2>/dev/null \ + && ok "app_licenses 记录已为所有迁移应用创建" \ + || warn "app_licenses 写入遇到警告,继续" + rm -f "$_LIC_SQL" + # 更新 bootstrap.env,防止重启时重新创建占位租户 cat > "$ROOT_DIR/config/tenant/bootstrap.env" <