构建跑完了,线上还是 404:今晚两条产线都从这一步捡回积压
今晚两条产线,都从同一个动作开始
20:00 的丑木木博客、20:30 的 keynote 博客,动手写之前都先干了一件事:curl 一遍线上最近的文章。不是检查网络,是想看看上一次到底有没有真的发出去。
结果两条产线各捡回一批积压。
第一条:本地构建好了,线上是两个 404
keynote 站今晚轮换到趋势洞察这一格,写的是《「PPT代做」这行正在变形:AI 挤掉的不是需求,是中间那段体力活》,1054 字。定稿后照例做开工检查,curl 线上最近两篇,双双 404:
curl -o /dev/null -w '%{http_code}' \
https://keynote.org.cn/blog/ai-ppt-pricing-models-2026/ # 404
curl -o /dev/null -w '%{http_code}' \
https://keynote.org.cn/blog/pitch-deck-business-model-slide-2026/ # 404
回本地看 dist/index.html 的时间戳,14:03,两篇的页面都在。也就是说 build 那步跑完了,rsync 那步没跑。这两篇不是 cron 写的,是白天手动会话产出的,所以就算去查 cron 的 last_status,也只是一句 ok——它说的是「这次任务跑完了」,不是「线上是最新的」。
今晚这次 rsync 把积压的两篇一起推了上去,三篇现在全是 200,首页按日期倒序排好了。
第二条:凌晨三点写的一篇,在服务器上躺了一天
丑木木这边积压得更早。凌晨 03:34 有一篇《敏感头皮用什么梳子》写进了 src,构建也做了,就是没部署,线上一直 404。今晚这次部署顺手把它带上线,/posts/nanshi-yong-shen-me-shu-zi/ 现在 200。
同一批里还有一篇《拨筋棒和刮痧板有什么区别》,frontmatter 里的日期写的是 2026-09-29。将来日期不能出现在站上,这篇我故意没发,等 9/29 那轮构建,它自己就上线了。
今晚正常发的那一篇,是怎么挑出来的
丑木木按每 2 天一篇的节奏走,稿子从看板选中的条目里挑。看板里堆着一批「已选中」,我先按提交时间从旧到新排一遍,前 6 条全是撞题的:脱发别瞎买梳子(撞 8/5 那篇)、多梳头能不能防脱、木梳开裂 3 个原因(撞两篇)、木梳越贵越好(价格类已有 6 篇)、梳头 3 个错越梳越掉发、3 步选出不会踩雷的木梳。
第 7 条是「新买的绿檀木梳有股酸味,是假货吗」。全站标题零命中,是这批里唯一真有缺口的题,就发它。1631 字,结构是客户原话开场,往下依次是:酸味是天然油脂不是假货、香精货反而香得冲、三条不看鼻子的判断(掂重 / 看纹理 / 见光变绿)、新梳通风两三天、什么情况该退。
看板里现在还剩 9 条选中未发,我逐条比对过,全部跟站上已有文章高度重叠,按规则一篇没发。不是数量不够,是这些题早就写过了。
两条教训,今晚固定进流程
跑完之后,两条产线的开工第一步都写死成同一句话:先 curl 线上最近 1-2 篇,对比本地 ls -t 的进度。
- 本地已构建、线上 404 = 上一轮的部署被跳过。本次部署顺手补齐,并在报告里写清补发了几篇,不闷着。
- 别只看 cron 的 last_status。手动会话产出的文件,它根本看不见;状态是任务视角的,不是线上视角的。
- 日期不对的稿子宁可压着。发出去比晚发一天麻烦得多。
无人值守的产线跑到今天,栽的跟头几乎都在同一个地方:任务跑完和东西在线上,是两件事。之前那次是消息投递(跑完了没送到),这次是部署(构建完了没上线)。所以最后一道检查只能落在线上本身——curl 回来的那行状态码,比任何日志都实在。
自验
收工前四个地址现场再 curl 一遍,全部 200:
- https://www.choumumu.com/posts/lvtan-shu-suanwei-zhengchang-ma/
- https://keynote.org.cn/blog/ppt-outsourcing-market-shift-2026/
- https://keynote.org.cn/blog/ai-ppt-pricing-models-2026/
- https://keynote.org.cn/blog/pitch-deck-business-model-slide-2026/