Odoo 14 Docker邮件模板图片生产环境无法显示问题排查
问题:Odoo 14生产环境自定义邮件模板图片404,本地正常
场景与现象
- 基于Odoo 14 Docker镜像开发,继承
mass_mailing模块实现自定义邮件模板,为模板添加选择缩略图、邮件内嵌入公司Logo - 本地开发环境下所有图片正常显示,部署至生产环境后全部图片加载失败,访问图片URL返回404:
Not Found
The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
- 模块内定义的CSS样式可正常生效
代码片段
<template id="custom_email_designer_snippets" inherit_id="mass_mailing.email_designer_snippets" name="Custom E-mail designer snippets"> <xpath expr="//div[@id='email_designer_themes']" position="inside"> <div data-name="custom_template" title="Custom Mailing Template" data-img="/mass_mailing_themes_custom/static/src/img/theme_imgs/custom_thumb" data-images-info='{"logo": {"format": "png"}}'> <t t-call="mass_mailing_themes_custom.theme_custom_template"/> </div> </xpath> </template> <template id="theme_custom_template"> <t t-call="mass_mailing.s_mail_block_paragraph"/> <t t-call="mass_mailing.s_mail_block_footer_separator"/> <img src="/mass_mailing_themes_custom/static/src/img/theme_custom_1/logo_grey_120x41.png" width="60" alt="Logo grey"/> </template>
原因及解决办法
1. 生产环境未收集静态资源
Odoo生产模式不会自动加载模块内的静态资源,必须手动执行静态资源收集命令,而本地开发模式会自动处理。Docker环境下执行以下命令:
# 替换<odoo容器名>和<数据库名>为实际值 docker exec -it <odoo容器名> /usr/bin/odoo-bin --load=web -d <数据库名> --update mass_mailing_themes_custom --static-link
也可以在启动容器时添加环境变量,确保每次启动自动收集:
-e ODOO_CMD_ARGS="--load=web --static-link"
2. 路径大小写不匹配
Linux生产环境(Docker默认镜像)区分文件名大小写,若本地是Windows/macOS(默认不区分大小写),代码中路径大小写与实际文件不一致会导致404。
- 检查
mass_mailing_themes_custom/static/src/img/下的文件夹、文件名,确保和代码中的路径完全一致(包括大小写)
3. 文件权限不足
生产环境中Odoo运行用户(通常为odoo)可能没有读取模块静态资源的权限,执行命令调整权限:
docker exec -it <odoo容器名> chown -R odoo:odoo /mnt/extra-addons/mass_mailing_themes_custom
4. 图片路径写法错误
直接使用绝对路径/mass_mailing_themes_custom/...在生产环境可能失效,因为静态资源会被收集到/web/content/路径下,建议改用Odoo标准的资源URL写法:
- 修改模板中的图片标签:
<img t-att-src="'/web/image/mass_mailing_themes_custom/static/src/img/theme_custom_1/logo_grey_120x41.png'" width="60" alt="Logo grey"/>
- 修改缩略图的
data-img属性(注意补充文件后缀,本地可能自动识别,生产环境必须明确):
data-img="/web/image/mass_mailing_themes_custom/static/src/img/theme_imgs/custom_thumb.png"
内容的提问来源于stack exchange,提问作者george
相关产品推荐
相关产品推荐

