模板继承改了个 `extend` 路径,静态资源全站 404 的凌晨三点

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 76 浏览 0 回复

昨晚重构后台主题,想着把公共头部抽出来做个基础模板,以后改导航不用每个文件翻。ThinkPHP 的模板继承用了这么多年,闭着眼睛都能写:

{extend name="base/layout" /}

本地开发一切正常,打包上传生产环境,刷新——整站 CSS、JS 全挂,控制台红得跟过年似的。F12 一看,静态资源路径全变成了 /static/admin/... 开头,但我的资源明明放在 /static/new_theme/admin/ 下面。

脑子第一反应是 Nginx 路径配错了,对着 vhost 配置文件看了二十分钟,没问题啊。又怀疑是 CDN 缓存,清了两遍,无效。

后来蹲厕所的时候才想起来:模板继承里的 base/layout 那个基础模板,它里面写的静态资源引用用的是相对路径 __STATIC__/admin/css/...,而我这次重构把主题目录整个换了,但 __STATIC__ 这个替换常量是在入口文件或者配置里绑定的,指向的是旧的静态资源发布路径。

本地为啥没事?因为本地我偷懒,新旧两套静态资源文件夹并存,老路径的文件根本没删,浏览器加载的还是旧的 CSS,碰巧样式名没大改,蒙混过关了。

生产环境部署脚本只同步了新主题,旧文件夹被清理得干干净净,这一刀下去直接现原形。

解决倒是简单,要么改配置里 __STATIC__ 的指向,要么在基础模板里把静态路径写成 {:asset('new_theme/admin/css/...')} 这种动态函数。但我选了个更折腾的:把静态资源扔到了 OSS,模板里全改成带 CDN 域名的绝对地址,以后换主题不用动路径配置。

代价是凌晨三点半还在传文件、刷新预热。最气人的是,这个问题本质上不是技术难点,是"本地环境太脏"埋的雷。以后重构前先把老文件挪走测一遍,这教训值一杯冰美式。

你们有没有遇到过本地"碰巧能用"、上线直接爆炸的路径问题?

评论0
回复 · 0
还没有回复
微信客服 微信客服