- 修复内置模板验证问题(builtin-video-material等) - 添加模板验证工具 lib/template-validator.ts - 创建模板系统优化需求文档(30个详细需求) - 优化上传API的模板验证逻辑 - 改进错误提示信息的清晰度 - 添加字段池和分类管理相关需求 - 完善自定义字段的创建、验证、存储逻辑 - 清理过期的 .specstory 和 .trae 文件
119 lines
4.2 KiB
Bash
119 lines
4.2 KiB
Bash
#!/bin/bash
|
||
|
||
# ============================================
|
||
# FLNXI素材库 - 修复 DATABASE_URL 脚本
|
||
# 用于修复数据库连接字符串问题
|
||
# ============================================
|
||
|
||
set -e
|
||
|
||
echo "========================================"
|
||
echo " 修复 DATABASE_URL 配置"
|
||
echo "========================================"
|
||
echo ""
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 检查 .env.production 文件是否存在
|
||
if [ ! -f .env.production ]; then
|
||
echo -e "${RED}错误: 未找到 .env.production 文件${NC}"
|
||
echo "请先运行 install.sh 进行安装"
|
||
exit 1
|
||
fi
|
||
|
||
# 加载环境变量
|
||
source .env.production
|
||
|
||
# 检查是否已有 DATABASE_URL
|
||
if [ -n "$DATABASE_URL" ]; then
|
||
echo -e "${GREEN}✓ 检测到 DATABASE_URL 已存在${NC}"
|
||
echo "当前 DATABASE_URL: ${DATABASE_URL:0:50}..."
|
||
|
||
# 检查是否需要更新(如果密码未编码)
|
||
if echo "$DATABASE_URL" | grep -q "=="; then
|
||
echo -e "${YELLOW}警告: DATABASE_URL 中的密码可能未正确编码${NC}"
|
||
echo "正在重新生成..."
|
||
NEED_UPDATE=1
|
||
else
|
||
echo -e "${GREEN}✓ DATABASE_URL 格式正确${NC}"
|
||
NEED_UPDATE=0
|
||
fi
|
||
else
|
||
echo -e "${YELLOW}未找到 DATABASE_URL,正在生成...${NC}"
|
||
NEED_UPDATE=1
|
||
fi
|
||
|
||
# 如果需要更新,生成新的 DATABASE_URL
|
||
if [ "$NEED_UPDATE" = "1" ]; then
|
||
if [ -z "$POSTGRES_PASSWORD" ]; then
|
||
echo -e "${RED}错误: 未找到 POSTGRES_PASSWORD${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo "正在对密码进行 URL 编码..."
|
||
|
||
# URL 编码密码
|
||
if command -v python3 &> /dev/null; then
|
||
POSTGRES_PASSWORD_ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$POSTGRES_PASSWORD', safe=''))")
|
||
elif command -v python &> /dev/null; then
|
||
POSTGRES_PASSWORD_ENCODED=$(python -c "import urllib.parse; print(urllib.parse.quote('$POSTGRES_PASSWORD', safe=''))")
|
||
elif command -v perl &> /dev/null; then
|
||
POSTGRES_PASSWORD_ENCODED=$(perl -MURI::Escape -e "print uri_escape('$POSTGRES_PASSWORD');")
|
||
else
|
||
# 如果没有 Python 或 Perl,使用 sed 简单替换常见特殊字符
|
||
POSTGRES_PASSWORD_ENCODED=$(echo "$POSTGRES_PASSWORD" | sed 's/+/%2B/g; s/\//%2F/g; s/=/%3D/g; s/@/%40/g; s/:/%3A/g')
|
||
fi
|
||
|
||
POSTGRES_USER=${POSTGRES_USER:-postgres}
|
||
POSTGRES_DB=${POSTGRES_DB:-flnxi}
|
||
NEW_DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD_ENCODED}@postgres:5432/${POSTGRES_DB}"
|
||
|
||
echo -e "${GREEN}✓ 已生成新的 DATABASE_URL${NC}"
|
||
echo "新 DATABASE_URL: postgresql://${POSTGRES_USER}:***@postgres:5432/${POSTGRES_DB}"
|
||
|
||
# 更新 .env.production 文件
|
||
if grep -q "^DATABASE_URL=" .env.production; then
|
||
# 如果已存在,替换
|
||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||
# macOS
|
||
sed -i '' "s|^DATABASE_URL=.*|DATABASE_URL=$NEW_DATABASE_URL|" .env.production
|
||
else
|
||
# Linux
|
||
sed -i "s|^DATABASE_URL=.*|DATABASE_URL=$NEW_DATABASE_URL|" .env.production
|
||
fi
|
||
echo -e "${GREEN}✓ 已更新 .env.production 中的 DATABASE_URL${NC}"
|
||
else
|
||
# 如果不存在,追加
|
||
echo "" >> .env.production
|
||
echo "# 完整的数据库连接URL(密码已URL编码,自动生成)" >> .env.production
|
||
echo "DATABASE_URL=$NEW_DATABASE_URL" >> .env.production
|
||
echo -e "${GREEN}✓ 已添加 DATABASE_URL 到 .env.production${NC}"
|
||
fi
|
||
|
||
# 更新 .env 文件
|
||
cp .env.production .env
|
||
echo -e "${GREEN}✓ 已同步到 .env 文件${NC}"
|
||
fi
|
||
|
||
echo ""
|
||
echo "========================================"
|
||
echo -e "${GREEN} 修复完成!${NC}"
|
||
echo "========================================"
|
||
echo ""
|
||
echo "下一步操作:"
|
||
echo " 1. 重启应用容器以应用新配置:"
|
||
echo " sudo docker compose -f docker-compose.prod.yml restart app"
|
||
echo ""
|
||
echo " 2. 等待容器启动后,执行数据库初始化:"
|
||
echo " sudo docker compose -f docker-compose.prod.yml exec app npx prisma db push"
|
||
echo ""
|
||
echo " 3. 如果仍有问题,检查容器内的环境变量:"
|
||
echo " sudo docker compose -f docker-compose.prod.yml exec app env | grep DATABASE_URL"
|
||
echo ""
|
||
|