fix(backend): Resolve PgBoss infinite loop issue and cleanup unused files
Backend fixes: - Fix PgBoss task infinite loop on SAE (root cause: missing queue table constraints) - Add singletonKey to prevent duplicate job enqueueing - Add idempotency check in reviewWorker (skip completed tasks) - Add optimistic locking in reviewService (atomic status update) Frontend fixes: - Add isSubmitting state to prevent duplicate submissions in RVW Dashboard - Fix API baseURL in knowledgeBaseApi (relative path) Cleanup (removed): - Old frontend/ directory (migrated to frontend-v2) - python-microservice/ (unused, replaced by extraction_service) - Root package.json and node_modules (accidentally created) - redcap-docker-dev/ (external dependency) - Various temporary files and outdated docs in root New documentation: - docs/07-运维文档/01-PgBoss队列监控与维护.md - docs/07-运维文档/02-故障预防检查清单.md - docs/07-运维文档/03-数据库迁移注意事项.md Database fix applied to RDS: - Added PRIMARY KEY to platform_schema.queue - Added 3 missing foreign key constraints Tested: Local build passed, RDS constraints verified
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# 🎯 2026年1月26日 部署状态真实记录
|
||||
# 🎯 2026年1月26-27日 部署状态真实记录
|
||||
|
||||
> **文档类型**:部署状态实时记录
|
||||
> **更新时间**:2026-01-26 16:30
|
||||
> **更新时间**:2026-01-27 15:30(数据库中文编码问题修复)
|
||||
> **部署人员**:开发团队
|
||||
> **文档目的**:记录本次部署的真实状态,供后续参考
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
| 3 | Node.js后端更新 | ✅ 已完成 | 2026-01-27 07:55 | v1.3 → v1.7,修复ES Module导入 |
|
||||
| 4 | 前端Nginx更新 | ✅ 已完成 | 2026-01-27 08:00 | v1.2 → v1.3,更新后端IP |
|
||||
| 5 | IIT回调地址配置 | ⏳ 待配置 | - | 外部平台配置 |
|
||||
| 6 | **数据库中文编码修复** | ✅ 已完成 | 2026-01-27 15:30 | PowerShell编码问题,重新导入数据 |
|
||||
|
||||
---
|
||||
|
||||
@@ -373,6 +374,17 @@ sha256:42bff8a3d65c0b11eafc09aae5aed9ef0ff6f550d60a3426c7f5d15c7433a973
|
||||
| 07:50 | 开始构建前端v1.3,修复Dockerfile跳过TypeScript检查 |
|
||||
| 08:00 | 前端v1.3部署成功,新IP(172.17.173.90) |
|
||||
| 08:05 | 更新前端环境变量,指向新后端IP |
|
||||
| 14:00 | 🔴 **发现数据库中文乱码问题**:用户名、租户名显示为 `????` |
|
||||
| 14:10 | 定位问题原因:PowerShell 编码破坏了 UTF-8 数据 |
|
||||
| 14:20 | 在 Docker 容器内重新导出本地数据库(正确的 UTF-8) |
|
||||
| 14:25 | 验证导出文件中文正确(王医生、示范医院等) |
|
||||
| 14:30 | 开启 RDS 外网访问,准备重新导入 |
|
||||
| 14:40 | 强制删除 RDS 测试数据库(`DROP DATABASE ... WITH (FORCE)`) |
|
||||
| 14:45 | 重新创建数据库,安装 pg_bigm、pgvector 插件 |
|
||||
| 14:50 | 在容器内直接导入数据(`psql -f /tmp/backup_utf8.sql`) |
|
||||
| 15:00 | ✅ 验证中文数据正确显示 |
|
||||
| 15:10 | 关闭 RDS 外网访问 |
|
||||
| 15:30 | 更新部署文档,记录问题和解决方案 |
|
||||
|
||||
---
|
||||
|
||||
@@ -405,20 +417,77 @@ sha256:42bff8a3d65c0b11eafc09aae5aed9ef0ff6f550d60a3426c7f5d15c7433a973
|
||||
5. ✅ **前后端TypeScript错误** - 跳过类型检查,部署优先
|
||||
6. ✅ **OSS环境配置** - 开发/生产Bucket分离
|
||||
7. ✅ **大量空文件恢复** - 从本地备份恢复
|
||||
8. ✅ **数据库中文乱码(????)** - PowerShell编码问题,在容器内直接导入修复
|
||||
|
||||
### 🎯 待完成任务
|
||||
|
||||
| 任务 | 优先级 | 说明 |
|
||||
|------|--------|------|
|
||||
| IIT回调地址配置 | 高 | 企业微信、微信服务号回调URL更新 |
|
||||
| TypeScript类型修复 | 中 | 改善代码质量,不影响运行 |
|
||||
| 功能全面测试 | 高 | 验证所有模块功能 |
|
||||
| 任务 | 优先级 | 状态 | 说明 |
|
||||
|------|--------|------|------|
|
||||
| 数据库中文编码修复 | 🔴 高 | ✅ **已完成** | PowerShell编码问题,已重新导入 |
|
||||
| IIT回调地址配置 | 🔴 高 | ⏳ 待完成 | 企业微信、微信服务号回调URL更新 |
|
||||
| 功能全面测试 | 🔴 高 | ⏳ 待完成 | 验证所有模块功能 |
|
||||
| TypeScript类型修复 | 🟡 中 | ⏳ 待完成 | 改善代码质量,不影响运行 |
|
||||
|
||||
---
|
||||
|
||||
> **🎉 部署状态**:核心服务全部完成!
|
||||
> **⏱️ 总耗时**:约17小时(跨2天)
|
||||
> **🎉 部署状态**:核心服务全部完成 + 中文编码问题已修复!
|
||||
> **⏱️ 总耗时**:约17小时(跨2天)+ 1.5小时(编码问题修复)
|
||||
> **🔜 下一步**:IIT回调地址配置 + 全面功能测试
|
||||
> **📝 最后更新**:2026-01-27 08:05
|
||||
> **📝 最后更新**:2026-01-27 15:30
|
||||
|
||||
---
|
||||
|
||||
## 🔴 2026-01-27 紧急修复:数据库中文编码问题
|
||||
|
||||
### 问题现象
|
||||
|
||||
部署完成后,前端显示用户名称、租户名称、联系人等信息全部为 `????` 或 `??`。
|
||||
|
||||
### 根因分析
|
||||
|
||||
数据迁移脚本 `database-migration-script.ps1` 使用 PowerShell 执行数据库导入:
|
||||
1. PowerShell 的 `>` 重定向默认使用 **UTF-16 LE** 编码
|
||||
2. `Get-Content` 默认使用 **GBK/CP936** 编码
|
||||
3. 虽然 `pg_dump` 指定了 `--encoding=UTF8`,但 PowerShell 管道破坏了编码
|
||||
|
||||
### 修复方案
|
||||
|
||||
**在 Docker 容器内直接操作,完全绕过 PowerShell:**
|
||||
|
||||
```bash
|
||||
# ❌ 错误做法(PowerShell编码问题)
|
||||
docker exec ... pg_dump ... > backup.sql
|
||||
Get-Content backup.sql | docker exec ... psql ...
|
||||
|
||||
# ✅ 正确做法(容器内直接操作)
|
||||
docker exec ... pg_dump ... -f /tmp/backup_utf8.sql
|
||||
docker exec ... psql ... -f /tmp/backup_utf8.sql
|
||||
```
|
||||
|
||||
### 修复步骤
|
||||
|
||||
1. ✅ 在容器内重新导出数据库(`pg_dump -f /tmp/backup_utf8.sql`)
|
||||
2. ✅ 验证导出文件中文正确(`王医生`、`示范医院` 等)
|
||||
3. ✅ 开启 RDS 外网访问
|
||||
4. ✅ 强制删除 RDS 测试数据库(`DROP DATABASE ... WITH (FORCE)`)
|
||||
5. ✅ 重新创建数据库(`CREATE DATABASE ... ENCODING='UTF8'`)
|
||||
6. ✅ 安装插件(pg_bigm、pgvector)
|
||||
7. ✅ 在容器内直接导入(`psql -f /tmp/backup_utf8.sql`)
|
||||
8. ✅ 验证中文数据正确显示
|
||||
9. ✅ 关闭 RDS 外网访问
|
||||
|
||||
### 验证结果
|
||||
|
||||
```
|
||||
用户名:王医生、李医生、测试用户、超级管理员、Prompt工程师 ✅
|
||||
租户名:示范医院、示范药企、壹证循科技、北京积水潭医院、武田制药 ✅
|
||||
联系人:张主任、李经理、张院长 ✅
|
||||
```
|
||||
|
||||
### 经验总结
|
||||
|
||||
- ⚠️ **Windows PowerShell 不适合处理 UTF-8 数据**:重定向和管道会破坏编码
|
||||
- ✅ **推荐做法**:数据库迁移时,在 Docker 容器内直接操作
|
||||
- ✅ **验证方法**:导入后立即查询中文字段,确认显示正确
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
# 🎉 2026年1月26-27日部署完成总结
|
||||
|
||||
> **部署日期**:2026-01-26 15:00 ~ 2026-01-27 08:05
|
||||
> **总耗时**:约17小时(跨2天)
|
||||
> **部署状态**:✅ 核心服务全部完成
|
||||
> **问题修复**:2026-01-27(数据库中文编码问题)
|
||||
> **总耗时**:约17小时(跨2天)+ 1小时(编码问题修复)
|
||||
> **部署状态**:✅ 核心服务全部完成 + ✅ 中文编码问题已修复
|
||||
> **文档日期**:2026-01-27
|
||||
|
||||
---
|
||||
@@ -70,6 +71,7 @@
|
||||
| 4 | **ES Module导入错误** | 🔴 严重 | 添加.js扩展名 |
|
||||
| 5 | **TypeScript类型错误** | 🟡 中等 | 跳过类型检查,部署优先 |
|
||||
| 6 | **网络构建失败** | 🟡 中等 | 重试构建,使用阿里云镜像源 |
|
||||
| 7 | **数据库中文乱码(????)** | 🔴 严重 | PowerShell编码问题,容器内直接导入修复 |
|
||||
|
||||
---
|
||||
|
||||
@@ -116,6 +118,55 @@
|
||||
| ✅ 部署优先策略 | 跳过类型检查,确保快速部署 |
|
||||
| ✅ 文档详细记录 | 问题排查和知识沉淀 |
|
||||
|
||||
### 4. 数据库迁移编码问题 🔴
|
||||
|
||||
| 问题 | 教训 | 改进措施 |
|
||||
|------|------|---------|
|
||||
| **PowerShell编码破坏** | PowerShell的 `>` 重定向默认使用UTF-16 LE,`Get-Content` 默认使用GBK,导致UTF-8数据被破坏 | **✅ 解决方案:在Docker容器内直接执行导入,完全绕过PowerShell** |
|
||||
| **中文显示为????** | 用户名称、租户名称、联系人等中文字段全部显示为乱码 | 使用 `docker exec ... psql -f` 直接在容器内导入,避免通过PowerShell管道 |
|
||||
|
||||
**问题详情(2026-01-27):**
|
||||
|
||||
**现象**:部署完成后,前端显示用户名称、租户名称、联系人等信息全部为 `????` 或 `??`。
|
||||
|
||||
**根因分析**:
|
||||
1. 数据迁移脚本 `database-migration-script.ps1` 使用 PowerShell 执行 `pg_dump` 和 `psql`
|
||||
2. PowerShell 的 `>` 重定向操作符默认使用 **UTF-16 LE** 编码,不是 UTF-8
|
||||
3. `Get-Content` 命令默认使用系统编码(Windows 通常是 **GBK/CP936**)
|
||||
4. 虽然 `pg_dump` 指定了 `--encoding=UTF8`,但 PowerShell 的管道破坏了编码
|
||||
|
||||
**修复方案**:
|
||||
```bash
|
||||
# ❌ 错误做法(PowerShell编码问题)
|
||||
docker exec ... pg_dump ... > backup.sql
|
||||
Get-Content backup.sql | docker exec ... psql ...
|
||||
|
||||
# ✅ 正确做法(容器内直接操作)
|
||||
docker exec ... pg_dump ... -f /tmp/backup_utf8.sql
|
||||
docker exec ... psql ... -f /tmp/backup_utf8.sql
|
||||
```
|
||||
|
||||
**修复步骤(2026-01-27):**
|
||||
1. ✅ 在容器内重新导出数据库(`pg_dump -f /tmp/backup_utf8.sql`)
|
||||
2. ✅ 验证导出文件中文正确(`王医生`、`示范医院` 等)
|
||||
3. ✅ 强制删除 RDS 测试数据库(`DROP DATABASE ... WITH (FORCE)`)
|
||||
4. ✅ 重新创建数据库(`CREATE DATABASE ... ENCODING='UTF8'`)
|
||||
5. ✅ 安装插件(pg_bigm、pgvector)
|
||||
6. ✅ 在容器内直接导入(`psql -f /tmp/backup_utf8.sql`)
|
||||
7. ✅ 验证中文数据正确显示
|
||||
|
||||
**验证结果**:
|
||||
```
|
||||
用户名:王医生、李医生、测试用户、超级管理员、Prompt工程师 ✅
|
||||
租户名:示范医院、示范药企、壹证循科技、北京积水潭医院、武田制药 ✅
|
||||
联系人:张主任、李经理、张院长 ✅
|
||||
```
|
||||
|
||||
**经验总结**:
|
||||
- ⚠️ **Windows PowerShell 不适合处理 UTF-8 数据**:重定向和管道会破坏编码
|
||||
- ✅ **推荐做法**:数据库迁移时,在 Docker 容器内直接操作,完全绕过 PowerShell
|
||||
- ✅ **验证方法**:导入后立即查询中文字段,确认显示正确
|
||||
|
||||
---
|
||||
|
||||
## 📋 当前系统配置速查
|
||||
@@ -154,13 +205,14 @@ OSS_ACCESS_KEY_ID=LTAI5tBHkL39GjdLfcr77Y3f
|
||||
|
||||
## 🔜 待完成任务
|
||||
|
||||
| 任务 | 优先级 | 预计时间 |
|
||||
|------|--------|---------|
|
||||
| **IIT回调地址配置** | 🔴 高 | 30分钟 |
|
||||
| **功能全面测试** | 🔴 高 | 2小时 |
|
||||
| **TypeScript类型修复** | 🟡 中 | 3小时 |
|
||||
| **性能测试** | 🟢 低 | 1小时 |
|
||||
| **监控告警配置** | 🟢 低 | 1小时 |
|
||||
| 任务 | 优先级 | 预计时间 | 状态 |
|
||||
|------|--------|---------|------|
|
||||
| **IIT回调地址配置** | 🔴 高 | 30分钟 | ⏳ 待完成 |
|
||||
| **功能全面测试** | 🔴 高 | 2小时 | ⏳ 待完成 |
|
||||
| **数据库中文编码修复** | 🔴 高 | 已完成 | ✅ **2026-01-27 完成** |
|
||||
| **TypeScript类型修复** | 🟡 中 | 3小时 | ⏳ 待完成 |
|
||||
| **性能测试** | 🟢 低 | 1小时 | ⏳ 待完成 |
|
||||
| **监控告警配置** | 🟢 低 | 1小时 | ⏳ 待完成 |
|
||||
|
||||
---
|
||||
|
||||
@@ -183,6 +235,7 @@ OSS_ACCESS_KEY_ID=LTAI5tBHkL39GjdLfcr77Y3f
|
||||
2. ⚠️ **环境变量同步**:确保本地.env、SAE环境变量一致
|
||||
3. ⚠️ **数据库备份**:任何Schema变更前必须备份
|
||||
4. ⚠️ **版本号管理**:按语义化版本递增
|
||||
5. ⚠️ **数据库迁移编码**:**Windows PowerShell 会破坏 UTF-8 编码**,必须使用容器内直接操作(`docker exec ... psql -f`)
|
||||
|
||||
---
|
||||
|
||||
@@ -192,7 +245,23 @@ OSS_ACCESS_KEY_ID=LTAI5tBHkL39GjdLfcr77Y3f
|
||||
|
||||
---
|
||||
|
||||
> **文档版本**:v1.0
|
||||
> **最后更新**:2026-01-27 08:05
|
||||
---
|
||||
|
||||
## 📝 后续问题修复记录
|
||||
|
||||
### 2026-01-27:数据库中文编码问题修复 ✅
|
||||
|
||||
**问题**:用户名称、租户名称、联系人等中文字段显示为 `????`
|
||||
|
||||
**原因**:PowerShell 编码问题导致数据迁移时 UTF-8 数据被破坏
|
||||
|
||||
**修复**:在 Docker 容器内直接执行导入,绕过 PowerShell 编码问题
|
||||
|
||||
**详情**:见"经验教训 - 数据库迁移编码问题"章节
|
||||
|
||||
---
|
||||
|
||||
> **文档版本**:v1.1
|
||||
> **最后更新**:2026-01-27(添加中文编码问题修复记录)
|
||||
> **维护人员**:开发团队
|
||||
|
||||
|
||||
Reference in New Issue
Block a user