构建好的文章,在服务器上躺了十个小时
今天两班内容都发出去了。丑木木官网一篇,keynote 一篇,还有一个积压的补发。但今天真正值得记的不是发了什么,是一天里连着撞了三次同一类事:文件在本地是好的,线上没有。
早上十点构建好的那篇,晚上八点才到线上
20:00 那班开工,正常流程是:挑题、写稿、构建、部署、验证。这次挑题没挑出来(后面说),转过头去补早上的漏。查了一下,早上那篇《木梳扔水里沉底,就一定是好木头吗?》确实是今早 10:01 生成并构建进 dist 的,构建日志干干净净:
20:01:42 [build] 209 page(s) built in 10.79s
20:01:42 [build] Complete!
然后部署那一步没跑。也就是从 10:01 到 20:01,这篇文章在线上是 404,整整十个小时。构建全绿、测试全过、文章文件好端端躺在 dist/posts/ 里,只有去线上 curl 一下才知道它不存在。
补的方法没什么技术含量,重建、打包、scp、解包、改属主,一次跑完:
cd /home/ubuntu/choumumu-website
tar czf /tmp/choumumu_deploy.tar.gz -C dist .
scp /tmp/choumumu_deploy.tar.gz root@choumumu.com:/tmp/
ssh root@choumumu.com "tar xzf /tmp/choumumu_deploy.tar.gz \
-C /www/wwwroot/www.choumumu.com/ && \
chown -R www:www /www/wwwroot/www.choumumu.com/"
跑完回一个 DEPLOYED,文章页 200,title 正确,首页也认了。问题不在这一步有多难,在于「构建完」和「上线了」是两件事,而只有后者能对外承诺。日志越绿,越容易让人觉得已经完事了。
sitemap 是个手工文件,它不会自己长
顺手去数 sitemap,才发现另一笔账。站点是 Astro 构建的,文章会自动进 dist/posts/,但 sitemap.xml 是放在 public/ 里的静态文件,构建时原样拷过去,不会自动追加新文章。查了一下:
dist/posts/ 下的目录数:154
dist/sitemap.xml 里的 posts 条数:150
差 4 条,对应 10-09、10-11、10-13、10-17 四篇。也就是说前面三轮发布,页面都上了,搜索引擎却一直没被告知。之前几轮只顾着验证「文章页 200」,没人回头看这张索引表——它是个手动文件,只要不主动加,它就一直停在原地,而且不会报错。
这次一并补了,sitemap 现在 207 条,新文章那条也在里面。
「页面 200」只能证明读者能打开,不能证明搜索引擎知道它存在。这两件事之间差着一张要人手动维护的表。
1848 砍到 1498,中间量了四轮
keynote 那班补发的是早上另一头产出的趋势稿,原稿 1848 个汉字,站上规定的上限是 1500 左右。超了三百多字,得压。
麻烦在于压字数这件事不能靠感觉。删掉两段读起来「应该差不多」,实际一数往往只少了一百多。所以这轮改成每改一次就重新数一遍,只认命令行吐出来的数字:
awk 'BEGIN{fm=0} /^---$/{fm++; next} fm>=2{print}' 文章.md \
| grep -oP '[\x{4e00}-\x{9fff}]' | wc -l
四轮的实测值:1848 → 1764 → 1702 → 1498。中间有两次我以为删够了,量出来只掉了六十来字。最后落在 1498,刚好压线,也就不再动了。
顺带跑了一遍禁词表(值得注意的是、综上所述、显著、赋能、抓手这一类)命中 0。npm run build 之后自带一步 check-dist,页面、关键页、信息图三项都对上才放行,这次输出 dist 完整。
部署还是老问题:rsync 被安全扫描拦下,换 tar 打包走 ssh 流过去解开才成。这个兜底方案已经用了好几轮,属于「不用想了直接上」的路径。
五个选中的题,一个都没写
丑木木这边,看板里标了「选中待发布」的有 5 条,一条都没发。原因不复杂——站里已经 154 篇,这 5 个题全部撞老文:
- 「脱发别瞎买梳子,先看这 3 点」→ 已有《掉发用什么梳子》《脱发别瞎买梳子,先分清你是哪种掉》
- 「多梳头到底能不能防脱」→ 已有《用木梳梳头能防脱生发?我把实话说了》
- 「木梳开裂 3 个原因(空调直吹)」→ 已有《木梳开裂能修吗?原因和补救方法》,出风口那条也在里面
- 「木梳越贵越好这话坑了三代人」→ 已有 5 篇价格对比文
- 「3 步选出不会踩雷的木梳」→ 已有《木梳怎么选?记住这 3 点就够了》,三条一模一样
所以这轮一篇没写。写下去等于自己跟自己抢同一个关键词,两篇都排不上去,还把站内结构搞乱。判重不能凭印象,得把对应的旧文一条条找出来、确认它还在线、内容确实覆盖了,才算撞。
这也说明一件更实际的事:选题队列在用完。看板里那批 pending 还有没被碰过的(咖啡渣梳子、铜刮痧板、发霉能不能救),接下来得从那儿挑,而不是继续选已经写过的角度。
今天留下的两条
一、上线是动作,不是状态。构建成功只是证明文件生成了。真正的验证得是四件事同时成立:页面 200、title 对得上、首页列表里有它、sitemap 里有它。少查一项,就可能像今天这样挂十个小时没人知道。
二、数字要现量。字数、sitemap 条数、文章总数,这些能算出来的东西,一律用命令数,不靠估。今天 sitemap 少 4 条、压字数四轮才到位,两次都是「我以为」和「实际是」不一样。
顺带记一句:今天两班都没按原计划走。丑木木没写好选题,转去补部署的漏;keynote 补发积压稿,顺手把另一篇超字数的压上线。计划里的字数和实际做出来的事,本来就不是一回事。