From 13ce116478f35f04655695e4b2591465eaf8665e Mon Sep 17 00:00:00 2001 From: "34047007@qq.com" <34047007@qq.com> Date: Mon, 10 Aug 2026 17:05:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20deploy.sh=20=E9=A2=84=E6=A3=80=E6=94=B9?= =?UTF-8?q?=E4=BB=8E=20.env=20=E6=96=87=E4=BB=B6=E8=AF=BB=E5=8E=9F?= =?UTF-8?q?=E5=A7=8B=E5=80=BC=EF=BC=88bash=20source=20=E4=BC=9A=E6=8A=8A?= =?UTF-8?q?=20KEY=3D[...]=20=E6=8C=89=E6=95=B0=E7=BB=84=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E5=89=A5=E5=BC=95=E5=8F=B7=EF=BC=8C=E5=AF=BC=E8=87=B4=E5=90=88?= =?UTF-8?q?=E6=B3=95=20JSON=20=E8=AF=AF=E6=8A=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/deploy.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/deploy/deploy.sh b/deploy/deploy.sh index 191d108..51fbc24 100644 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -125,12 +125,14 @@ set -a; source "$REPO_ROOT/.env"; set +a # 写成了逗号列表会在迁移时炸(8-10 事故),这里提前捕获,给出正确写法提示。 # 仅检查 config.py 中的复杂类型字段(现仅 CORS_ORIGINS);str 类型(如 REDIS_URL) # 不按 JSON 解析,预检会误报,不要加进来。 +# 注意:必须从 .env 文件直接 grep 原始值——bash `source .env` 会把 `KEY=["a","b"]` +# 按数组语法解析并剥掉引号,${KEY} 拿到的是非法 JSON,造成假阴性。 json_env_check() { - local var="$1" - local v="${!var:-}" - [ -z "$v" ] && return 0 - if ! python3 -c "import json,sys; json.loads(sys.argv[1])" "$v" 2>/dev/null; then - error "$var 必须是合法 JSON(如 [\"https://a.com\"]),当前值: $v + local var="$1" raw + raw="$(grep -E "^[[:space:]]*(export[[:space:]]+)?${var}[[:space:]]*=" "$REPO_ROOT/.env" | tail -1 | sed -E "s/^[^=]*=//" || true)" + [ -z "$raw" ] && return 0 + if ! python3 -c "import json,sys; json.loads(sys.argv[1])" "$raw" 2>/dev/null; then + error "$var 必须是合法 JSON(如 [\"https://a.com\"]),.env 当前值: $raw 请修改 $REPO_ROOT/.env 后重试。" fi }