IBM云部署Odoo 12时ir_attachment报错导致UI无法加载问题求助
故障根因
这个报错是Odoo的ir_attachment表中ID为673的记录对应的物理存储文件丢失导致的。Bitnami打包的Odoo 12默认将附件存储在/opt/bitnami/odoo/data/filestore/路径下,数据库存在该附件的关联记录但磁盘上找不到对应哈希命名的文件,访问时抛出文件未找到异常,进而阻塞整个UI渲染。
修复步骤
- 第一步:进入运行中的Odoo Pod,启动Odoo Shell
# 替换为实际的Odoo Pod名称 kubectl exec -it <odoo-pod-name> -- bash # 启动Odoo Shell,指定你的业务数据库名,此处报错对应的数据库为openg2p odoo shell -d openg2p
- 第二步:定位缺失的附件基础信息,确认可修复方式
在Odoo Shell中执行以下代码,先查看缺失附件的关联信息:
# 定位ID为673的附件记录 bad_attach = env['ir.attachment'].browse(673) # 打印附件关联信息,确认用途 print(f"附件名称:{bad_attach.name}") print(f"关联业务模型:{bad_attach.res_model}") print(f"关联业务记录ID:{bad_attach.res_id}") print(f"存储路径:{bad_attach.store_fname}")
- 第三步:根据附件类型选择修复方案
- 如果该附件为用户上传的非核心资源(头像、业务文档等):无需删除记录,直接清空附件内容即可避免外键冲突:
bad_attach.write({'datas': False}) # 若有备份的原文件,也可以替换为备份文件内容 # import base64 # with open('/path/to/backup/file', 'rb') as f: # bad_attach.write({'datas': base64.b64encode(f.read())})- 如果该附件为系统模块依赖的核心静态资源:直接升级对应关联的模块即可自动恢复缺失的资源文件:
# 退出Odoo Shell后执行,替换为实际关联的模块名,比如web、auth_signup等 odoo -d openg2p -u <关联模块名> --stop-after-init - 第四步:提交变更并重启服务
在Odoo Shell中执行提交操作:
env.cr.commit()
退出Shell后重启Odoo Deployment生效:
# 替换为实际的Odoo Deployment名称 kubectl rollout restart deployment <odoo-deployment-name>
- 后续排查建议:检查IBM云环境中Odoo对应的持久化卷配置,确认
filestore目录挂载的PVC是否正常,排除存储卷意外卸载、数据同步失败导致的文件丢失问题。
内容的提问来源于stack exchange,提问作者Ishan Ranasingh
相关产品推荐
相关产品推荐

