From 5aad0eb8f15cb7a7b9dce88d9183717bdd830941 Mon Sep 17 00:00:00 2001 From: selfrelease Date: Wed, 15 Jul 2026 11:41:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20server.py=20=E6=94=AF=E6=8C=81=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=8F=98=E9=87=8F=E9=85=8D=E7=BD=AEDB=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=20+=20deploy=5Fremote.sh=20=E9=80=82=E9=85=8D?= =?UTF-8?q?=E8=BF=9C=E7=A8=8BPG15=E7=AB=AF=E5=8F=A35432=20+=20deploy.sh=20?= =?UTF-8?q?=E8=AE=BE=E7=BD=AEDB=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/deploy_remote.sh | 47 +++++++++++++++++++++++++++---------------- demo/web/server.py | 10 ++++++++- deploy.sh | 1 + 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/demo/deploy_remote.sh b/demo/deploy_remote.sh index 3cf56ee..c476b2b 100644 --- a/demo/deploy_remote.sh +++ b/demo/deploy_remote.sh @@ -18,33 +18,46 @@ if [ -z "$PSQL" ]; then exit 1 fi -# 查找 PG socket 目录 -SOCKET_DIR="" -for d in /var/lib/pgsql/data /opt/wxsales/demo/db/socket /tmp; do - if [ -S "$d/.s.PGSQL.5434" ]; then SOCKET_DIR="$d"; break; fi -done +# 远程环境:PG 15 端口 5432,用 postgres 用户连接 +PSQL_CMD="$PSQL -h 127.0.0.1 -p 5432 -U postgres -d wxchat_sales" -# 构建连接参数 -if [ -n "$SOCKET_DIR" ]; then - PSQL_CMD="$PSQL -h $SOCKET_DIR -p 5434 -d wxchat_sales" -else - # 尝试默认连接 - PSQL_CMD="$PSQL -p 5434 -d wxchat_sales" +# 检查连接方式:优先 su postgres,其次直连 +PG_CONN_OK=0 +su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -c 'SELECT 1'" >/dev/null 2>&1 && PG_CONN_OK=1 + +if [ "$PG_CONN_OK" -eq 0 ]; then + echo "[WARN] postgres 用户连接失败,尝试 root 直连..." + PSQL_CMD="$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales" fi echo "[INFO] 使用 psql: $PSQL" echo "[INFO] 执行 schema.sql..." # 执行 schema.sql(幂等,包含迁移语句) -$PSQL_CMD -f "$DEMO_DIR/db/schema.sql" 2>&1 || { - echo "[WARN] schema.sql 执行有警告,尝试继续..." -} +if [ "$PG_CONN_OK" -eq 1 ]; then + su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -f $DEMO_DIR/db/schema.sql" 2>&1 || { + echo "[WARN] schema.sql 执行有警告,尝试继续..." + } +else + $PSQL_CMD -f "$DEMO_DIR/db/schema.sql" 2>&1 || { + echo "[WARN] schema.sql 执行有警告,尝试继续..." + } +fi # 重置序列 -$PSQL_CMD -c "SELECT setval('product_id_seq', COALESCE((SELECT max(id) FROM product), 1), true);" 2>/dev/null || true -$PSQL_CMD -c "SELECT setval('salesperson_id_seq', COALESCE((SELECT max(id) FROM salesperson), 1), true);" 2>/dev/null || true +if [ "$PG_CONN_OK" -eq 1 ]; then + su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -c \"SELECT setval('product_id_seq', COALESCE((SELECT max(id) FROM product), 1), true);\"" 2>/dev/null || true + su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -c \"SELECT setval('salesperson_id_seq', COALESCE((SELECT max(id) FROM salesperson), 1), true);\"" 2>/dev/null || true +else + $PSQL_CMD -c "SELECT setval('product_id_seq', COALESCE((SELECT max(id) FROM product), 1), true);" 2>/dev/null || true + $PSQL_CMD -c "SELECT setval('salesperson_id_seq', COALESCE((SELECT max(id) FROM salesperson), 1), true);" 2>/dev/null || true +fi # 验证 -PRODUCT_COUNT=$($PSQL_CMD -t -c "SELECT count(*) FROM product;" 2>/dev/null | xargs || echo "0") +if [ "$PG_CONN_OK" -eq 1 ]; then + PRODUCT_COUNT=$(su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -t -c 'SELECT count(*) FROM product;'" 2>/dev/null | xargs || echo "0") +else + PRODUCT_COUNT=$($PSQL_CMD -t -c "SELECT count(*) FROM product;" 2>/dev/null | xargs || echo "0") +fi echo "[OK] 产品数量: $PRODUCT_COUNT" echo "[OK] 数据库迁移完成" diff --git a/demo/web/server.py b/demo/web/server.py index c75e555..0969b8c 100644 --- a/demo/web/server.py +++ b/demo/web/server.py @@ -8,6 +8,7 @@ from __future__ import annotations import datetime as dt import json +import os import pathlib import re import subprocess @@ -27,7 +28,14 @@ from pydantic import BaseModel ROOT = pathlib.Path(__file__).resolve().parent STATIC_DIR = ROOT / "static" SOCKET_DIR = ROOT.parent / "db" / "socket" -DSN = f"host={SOCKET_DIR} port=5434 dbname=wxchat_sales" + +# DSN:优先环境变量 DATABASE_URL,其次 DB_HOST/DB_PORT,最后默认本地 socket +if os.environ.get("DATABASE_URL"): + DSN = os.environ["DATABASE_URL"] +elif os.environ.get("DB_HOST"): + DSN = f"host={os.environ['DB_HOST']} port={os.environ.get('DB_PORT', '5432')} dbname={os.environ.get('DB_NAME', 'wxchat_sales')} user={os.environ.get('DB_USER', 'postgres')} password={os.environ.get('DB_PASSWORD', '')}" +else: + DSN = f"host={SOCKET_DIR} port=5434 dbname=wxchat_sales" app = FastAPI(title="微信营销管理系统 MVP") diff --git a/deploy.sh b/deploy.sh index 3506312..919aedb 100644 --- a/deploy.sh +++ b/deploy.sh @@ -56,6 +56,7 @@ ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} " fi # 启动新进程 cd ${REMOTE_DEMO} + DB_HOST=127.0.0.1 DB_PORT=5432 DB_USER=postgres DB_NAME=wxchat_sales \ nohup /usr/bin/python3 -m uvicorn web.server:app --host 127.0.0.1 --port 8770 \ > ${REMOTE_DEMO}/web.log 2>&1 & sleep 2