Odoo v16报表CSS加载异常求助(Odoo.sh部署环境)
Odoo.sh v16 批量发票报表CSS随机加载失败问题解决思路
问题描述
部署在Odoo.sh上的Odoo v16数据库,批量发送发票时部分发票CSS会随机加载失败,一段时间后自动恢复。日志追踪发现:
- 12:05:22时
web.report_assets_common.min.css的URL发生切换(从/web/assets/227768-c5247d9/变为/web/assets/227861-45bea67/) - URL切换后,请求旧地址返回404,但批量生成PDF过程中系统仍持续调用旧URL,导致部分发票CSS缺失
- 已设置
report.url、web.base.url和web.base.url.freeze系统参数,但问题仍随机出现
相关日志片段:
... [28/May/2024 12:05:16] "GET /web/assets/227768-c5247d9/web.report_assets_common.min.css HTTP/1.0" 200 - 4 0.001 0.004 [28/May/2024 12:05:19] "GET /web/assets/227768-c5247d9/web.report_assets_common.min.css HTTP/1.0" 200 - 4 0.001 0.004 [28/May/2024 12:05:22] "GET /web/assets/227861-45bea67/web.report_assets_common.min.css HTTP/1.0" 200 - 9 0.004 0.008 [28/May/2024 12:05:22] "GET /web/assets/227768-c5247d9/web.report_assets_common.min.css HTTP/1.0" 404 - 9 0.007 0.005 ...
URL切换时段日志:
[28/May/2024 12:05:19] "POST /web/dataset/call_kw/stock.picking/read HTTP/1.0" 200 - 54 0.030 0.022 [28/May/2024 12:05:19] "POST /web/dataset/call_kw/stock.move/read HTTP/1.0" 200 - 25 0.013 0.020 odoo.addons.base.models.ir_actions_report: The PDF documents 'VF_2024_07050.pdf' are now saved in the database odoo.addons.base.models.ir_actions_report: The PDF report has been generated for model: account.move, records [86727]. ... odoo.addons.base.models.ir_actions_report: wkhtmltopdf: Exit with code 1 due to network error: ContentNotFoundError [28/May/2024 12:05:25] "GET /web/assets/227768-c5247d9/web.report_assets_common.min.css HTTP/1.0" 404 - 2 0.002 0.004
解决方案思路
1. 强制固定资产URL(适配Odoo.sh特性)
Odoo.sh的自动部署、资产编译机制可能会触发资产哈希更新,即使设置web.base.url.freeze也可能被覆盖:
- 在Odoo.sh环境变量中添加
ODOO_ASSETS_BASE_URL,设置为固定的资产路径前缀(如https://你的域名.com/web/assets/),跳过自动生成的哈希部分 - 或在自定义模块中重写报表资产URL生成逻辑,强制使用固定路径而非带哈希的动态地址
2. 调整批量报表并发策略
批量生成PDF时多进程并行处理,可能出现部分进程用旧哈希、部分用新哈希的情况:
- 限制批量发票处理的并发数,改为串行执行,确保所有PDF生成请求使用同一版本的资产URL
- 批量处理前手动触发资产预编译,确保生成PDF时资产哈希已稳定
3. 禁用wkhtmltopdf缓存
wkhtmltopdf可能缓存旧资产URL,导致切换后仍请求旧地址:
- 在报表生成逻辑中添加
--no-cache参数,禁用wkhtmltopdf的缓存 - 自定义报表模板时,直接使用绝对路径引用CSS,不依赖Odoo的动态资产URL
4. 验证Odoo.sh环境配置
- 确认
web.base.url.freeze参数已设为True,且未被Odoo.sh自动部署脚本重置 - 检查Odoo.sh部署日志,确认问题发生时段是否有自动更新或资产编译操作触发哈希切换
内容的提问来源于stack exchange,提问作者Sven Coeck
相关产品推荐
相关产品推荐

