Waline 后台页面空白
上个月 28 号的早上,我像往常一样打开微信邮件提醒,收到了读者的一条新留言。心里还想着赶紧去 Waline 后台回复。然而当我熟练地输入后台地址后,眼前却只有一片刺眼的空白。我以为是网络波动于是刷新了几次,甚至换了 Safari 尝试(我平时用 Brave),结果依旧令人困惑。我什么都没改动过,服务应该稳定运行才对。可现实就是这么不讲道理——一个原本好端端的后台管理系统,就这样毫无征兆地罢工了,只留给我一个冰冷的白色屏幕。
尝试访问后台页面并没有改变,结果都是一样的,反复刷新换浏览器都不行。可我什么都没改,想着是不是服务器或者平台那边出了状况?突然想起来,之前家里路由器也遇到过类似的情况——明明什么都没动,就是突然连不上网,但重启一次之后居然奇迹般地好了。我决定重新编译部署一次 Waline。点击部署按钮后,页面从空白变成了 Vercel 502。翻查日志后发现 @waline/vercel 出了新版本,因为新版本存在兼容问题,导致了部署失败。
询问了 DeepSeek,它告诉我说可以从 package.json 修改版本号。DeepSeek 的回复很令我高血压,反复提醒了几遍后才指出要把 @waline/vercel 的版本号手动改回上一个稳定版本,这样做就能绕过新版带来的编译错误。我照做了,修改完成后重新部署,果然编译错误消失了,心里还稍微松了口气。这种轻松只持续了几秒钟——当我再次打开后台页面时,看到的从 Vercel 502 变回了一片空白。只解决了依赖问题,本质问题没有解决。

尝试无果后,我给 Waline 提交了 Issue,希望他们能够解决。我把遇到的问题、复现步骤、截图和部署日志都详细地写了出来,提交到了 GitHub 仓库的 Issues 区。大概是同一天中午的时候,我收到了项目负责人的回复,他觉得我的问题很像另外一个人提出的 Issue。负责人还贴上了那个 Issue 的链接,建议我先去看看。不过那个帖子的发起人随后在下面解释说,他们的问题其实差别很大,只是表面上有那么一点点相似,本质上完全不同。
我看了另外一个 Issue,他的问题是后台打开后只能看到黄色的背景,看不到任何的评论。也就是说,那个用户至少还能看到管理后台的框架和黄色的主题背景,只是评论列表没有加载出来——事实上,我和他的问题并不相同。我打开后台后连黄色的背景都看不到,整个页面完全是空白一片。于是我补上了我的空白页面截图和 Vercel 日志说明、仓库 Commit 历史,解释了我与那位用户之间的本质区别,希望能帮助负责人更准确地定位问题根源。
大概是下午的时候,问题终于确定了,是新发布的 Waline 版本出了问题。经过维护者 lizheming 的排查,确认是最新发布的版本中某个核心模块的改动引发了一系列连锁反应。导致了下游依赖此功能的项目全都失效了,也就是说,不仅是我的站点,任何基于新版 Waline 搭建评论系统的网站,后台都可能遭遇同样的空白或报错问题。这就是为什么我不喜欢 Memos,因为开源社区总是不通知用户就改。这种做法,稍不注意整个服务就瘫痪了。
晚上的时候有一个外国哥们也评论了这个 Issue,他也遇到了这个问题。他在评论区用英语详细描述了现象,和我遇到的完全一致——后台空白、部署失败、502 错误,一个不落。再晚一些的时候,朋友峰哥来到了我的网站评论区,跟我说他的低版本 Waline 也遇到了这个问题。峰哥说他并没有主动升级过,但 Waline 的某些依赖可能自动更新了,导致他的低版本也受到了波及。真的很离谱,无论高低版本,整个 Waline 生态在那一天几乎集体陷入了混乱。
因为我平时都是使用网站账号进行回复的,如果使用 Gravatar 账号信息回复,就不会显示“博主”、“作者”那些我设定好的标签,整得好像我是个盗版一样。还好我熟悉 Waline 的数据库结构,在 Neon 里修改了评论归属。我直接登录 Neon 数据库管理面板,找到对应的评论表,手动把几条评论的 user_id 段改成了本站用户 ID,这样一来,那些评论就能正确地显示博主标签了。评论几下真的是累死我了,在空调室里也能感到烦躁。
大概是晚上十一到十二点的时候,问题完全解决了。维护者发布了一个新版本,这个版本明显是为了解决问题而生的,界面比之前的还要临时。新版本去掉了有问题的功能模块,界面变得极其简陋,甚至有些按钮的样式都没来得及调好,但至少它恢复了核心功能。虽然看起来有点“粗糙”和“临时工风格”,但至少解决了依赖和空白页面问题,没必要特地担心什么评论无法导出了。看到后台终于能正常打开,评论列表也能正常加载,我长舒了一口气。
开源社区的好处,就是出现问题之后能很快反应给维护者。这次的问题,只用了一天就解决了。从早上发现故障到深夜彻底修复,前后不过十几个小时,这种响应速度是商业软件很难做到的。但反面也很明显,那些比较活跃的开源项目都喜欢动不动就重建,尤其是我还在用 Linux 的时候,一堆 Rust 做的现有程序重构。很多原本稳定运行的工具,某天突然就宣布用 Rust 重写,然后旧版本不再维护,用户被迫跟着升级,每次升级又伴随着新的兼容性问题。




