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 }