各位老友们好,我是 Chlorine。
今天讲一个挺抽象的事,就是关于 Twikoo 评论的更新。请做好血压飙升的准备。
前言
Twikoo 这个评论系统我从建站开始就开始用,美观,功能强大,(大部分时候)省心,而且开发者 iMaeGoo 大佬也一直在尽心尽力地维护。这大半年下来,也攒了一百多条评论了,也是我这个小破站的珍贵回忆呐。
我的 Twikoo 有两个云函数,一个在 Vercel 上,一个在 Netlify 上。本来用的是前一个,后来秉持着服务都堆到副域名的原则换成了后一个。反正数据库都是那一个,换个域名有什么大不了的。
记住这句话(咬牙切齿)
左思
注:这个标题是谐音
今天看到 Twikoo 更新了,于是打算更新一下。只不过 Twikoo Netlify 的更新实在是有点抽象,不管是把 package.json
的版本号改成 latest
还是 1.6.38
都不好使。我甚至顺手去提了个 issue。
然后,我就想到了一个让我想打自己的主意:那我重新部署不就行了?
火速删除项目,导入仓库重新部署……
我记得 Twikoo 得有个环境变量 MONGODB_URI
来着?应该填多少呢?
坏了,我不知道。刚才删除得太着急,忘记复制了。我记得 Vercel 的那个似乎和这个不是一个数据库?应该存的是旧版的数据,没有用。
这应该不是什么大逝,去 MongoDB 重新创建一个 user 就完事。期间顺带着喜提几个 function crash,经过检测是 MongoDB 的 Network Access 没配置泛播可见。
然后 redeploy,云函数运行正常,美滋滋。
喜滋滋地去网站上看一圈……这怎么需要注册?重设密码了?
行吧,重设就重设。点进去……
不是,我评论呢?怎么全没了?!
抢救
这属实是吓了我一跳。这怎么换个字符串啥也没有了?
注:后来看到了 Twikoo 官网的备注:
连接字符串包含了连接到 MongoDB 数据库的所有信息,一旦泄露会导致评论被任何人添加、修改、删除,并有可能获取你的 SMTP、图床 token 等信息。请妥善记录这一字符串,之后需要填入到 Twikoo 的部署平台里。
好像有点合理,但是又不合理……
事不宜迟,赶紧想招。我没有 twikoo_comment.json
的备份,唯一可能的方式就是通过 MongoDB 直接导出。我有导出 MongoDB 数据的经验,但是现在 Windows 备用机不在手中,只能硬着头皮用 MacBook 导出。
看一下 MongoDB 的数据量,看起来很正常,一百多兆呢(我真傻,真的。Twikoo 的数据基本都是文本,怎么可能有这么大的数据量?后来我看了新的 MongoDB 后端面板,我这些评论加在一起只有 156kb,那也就是说我需要十几万条评论才可能达到这个量……这都是后话了)。这也使我成功地忽略了侧边栏显示的那一堆奇怪的 collection。
然后,自然是没有然后啊。MongoDB Compass 啥也导不出来,MongoDB Atlas CLI 倒是一次成功了,但是导出的是空的(我真傻,真的,我早该想到的,前端面板都看不见,MongoDB 怎么可能有有效数据?)。
事已至此,先吃席吧。——我的微积分助教 PWK 学长
然后我就摆烂了。算了,丢了就丢了吧。大不了从头再来,还可以趁机换个评论系统(此处容我吐槽一下,Twikoo 的加载慢得不像人)。
然后我又回到了我忠诚的本地环境。想着反正都丢了,不如试着把 envID 换成原本那个域名,里面还留着一些评论,还能损失最小化。反正情况也不可能再糟糕了。
make
构建,在浏览器里面预览……然后,奇迹发生了:我的评论全回来了。
原来,事实上,我的两个云函数共享着同一份数据库。言语已经不能形容我此刻的心情了。
多中心备份配享太庙!
后续
其实到这里故事已经可以结束了,我只需要把 Vercel 云函数的环境变量扒下来就完事。但是我打算再走一步。
我重新开了一个 project,创建了一个新的数据库。这次的字符串我拷贝了下来,存到了我的 tokens.csv
里面。然后部署 Netlify 云函数(顺带着又喜提几个 function crash)。然后打开前端面板,导入我新下载的 JSON。
这一方面算是多数据库备份,另一方面,我希望调几个数据,而 Twikoo 的前端导入功能有时候不太好使,不能覆盖。所以干脆导入一个白板里面。
由于 Twikoo 的面板配置存在连接字符串里面,因此我需要再配一遍。这倒不是麻烦事。期间我还注册了新的机器人邮箱 [email protected]
,以后大家就可以接到这个小助手的邮件通知啦(我本来想用 outlook,奈何实在是不给力,一直 SMTP error,一点招没有)。