4.0 KiB
4.0 KiB
修复Ubuntu环境下占位符未替换问题
问题描述
在本地Windows环境下生成的谈话审批表内容正确,占位符被正确替换,但在远程Ubuntu服务器上生成的文档中占位符没有被正确替换。
可能的原因
- 文件保存问题:在Ubuntu上,文件保存后可能没有正确刷新到磁盘
- 编码问题:Windows和Ubuntu在处理文件编码时可能有差异
- 文件系统同步问题:Ubuntu上可能需要显式同步文件系统
- 占位符匹配问题:可能因为编码或格式问题导致占位符没有被正确识别
修复内容
1. 增强占位符替换逻辑
- 添加了正则表达式匹配作为备用方案,确保能够识别各种格式的占位符
- 增强了替换逻辑,使用多种方式检查占位符是否存在
2. 增强文件保存验证
- 保存后验证文件是否存在且大小大于0
- 在非Windows系统上显式同步文件系统(使用
os.sync()) - 保存后重新打开文件验证内容是否正确
3. 增强调试信息
- 添加了详细的调试日志,记录每个替换步骤
- 在替换前后验证占位符是否存在
- 记录替换的详细信息,便于诊断问题
4. 增强替换后验证
- 替换后立即验证段落文本是否还包含占位符
- 如果验证失败,记录详细的错误信息
- 多次尝试写入,确保文本被正确写入
修改的文件
services/document_service.py
主要修改点
-
replace_placeholder_in_paragraph函数:- 添加了正则表达式匹配作为备用方案
- 增强了占位符检测逻辑
- 添加了替换后的验证步骤
-
文件保存部分:
- 添加了文件保存后的验证
- 在Ubuntu上显式同步文件系统
- 保存后重新打开文件验证内容
-
调试信息:
- 添加了详细的调试日志
- 记录每个替换步骤的详细信息
如何验证修复
-
查看日志:
- 在Ubuntu服务器上运行服务时,查看控制台输出的调试信息
- 特别关注以下日志:
[DEBUG] 替换占位符: ...[DEBUG] 保存前验证:检查文档中是否还有占位符...[DEBUG] 保存后验证通过:文件中所有占位符已替换[WARN] 保存后验证:文件中仍有占位符: ...
-
测试文档生成:
- 在Ubuntu服务器上生成谈话审批表
- 下载生成的文档,检查占位符是否被正确替换
- 如果仍有问题,查看日志中的警告信息
-
对比测试:
- 在Windows和Ubuntu上使用相同的数据生成文档
- 对比生成的文档内容
- 查看日志中的差异
如果问题仍然存在
如果修复后问题仍然存在,请检查以下内容:
-
查看日志:
- 检查是否有
[WARN]或[ERROR]日志 - 特别关注占位符替换相关的警告
- 检查是否有
-
检查字段数据:
- 确认传入的
field_data包含所有需要的字段 - 确认字段值不为空
- 确认传入的
-
检查模板文件:
- 确认模板文件中的占位符格式正确(
{{field_code}}) - 确认占位符没有被其他字符包围
- 确认模板文件中的占位符格式正确(
-
检查python-docx版本:
- 确认Windows和Ubuntu上使用的是相同版本的
python-docx - 当前版本:
python-docx==1.1.0
- 确认Windows和Ubuntu上使用的是相同版本的
-
检查文件权限:
- 确认Ubuntu服务器上的临时目录有写入权限
- 确认MinIO上传功能正常
进一步诊断
如果问题仍然存在,可以:
-
启用更详细的日志:
- 在代码中添加更多调试信息
- 记录每个步骤的详细信息
-
对比文件内容:
- 下载Windows和Ubuntu上生成的文档
- 使用工具对比文件内容,找出差异
-
检查环境差异:
- 对比Windows和Ubuntu上的Python版本
- 对比依赖包的版本
- 检查系统编码设置
注意事项
- 修复后的代码在保存文件时会等待0.1秒,确保文件系统同步
- 在Ubuntu上会显式调用
os.sync()同步文件系统 - 如果文件保存验证失败,会抛出异常,阻止错误文件被上传