评论系统迁移记录(Waline)
条评论由于2026年1月12日发出公告 LeanCloud 停止对外提供服务(一年后),所以就着手迁移评论系统,发现了Waline并开始折腾,按指引部署到vercel。
数据导出导入
接着我就把从LeanCloud导出来的评论数据,准备导入到所使用的数据库Neno。原来的数据格式(删除了没用字段)是:1
2
3
4
5
6
7
8
9
10
11
12{
"comment": "<p>😏欢迎留言交流</p>\n",
"createdAt": "2018-11-18T04:30:48.362Z",
"insertedAt": "2018-11-18T04:30:46.965Z",
"link": "http://www.scaugreen.cn",
"mail": "",
"nick": "alw",
"objectId": "5bf0eaf89f54540070412316",
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36",
"updatedAt": "2020-06-06T11:52:21.547Z",
"url": "/posts/44755/"
}
使用AI生成SQL导入报错,提示有几个字段不对,一核SQL发现是几个字段的格式变了(各个id原来是字符串,现在变成int了):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20CREATE TABLE wl_comment (
id int check (id > 0) NOT NULL DEFAULT NEXTVAL ('wl_comment_seq'),
user_id int DEFAULT NULL,
comment text,
insertedAt timestamp(0) without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
ip varchar(100) DEFAULT '',
link varchar(255) DEFAULT NULL,
mail varchar(255) DEFAULT NULL,
nick varchar(255) DEFAULT NULL,
pid int DEFAULT NULL,
rid int DEFAULT NULL,
sticky numeric DEFAULT NULL,
status varchar(50) NOT NULL DEFAULT '',
"like" int DEFAULT NULL,
ua text,
url varchar(255) DEFAULT NULL,
createdAt timestamp(0) without time zone NULL DEFAULT CURRENT_TIMESTAMP,
updatedAt timestamp(0) without time zone NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ;
于是我用AI帮我转换一下格式,让AI帮我重新生成id重新建立关系:1
2
3
4
5
6
7
8
9
10
11{
"comment": "<p>😏欢迎留言交流</p>\n",
"createdAt": "2018-11-18T04:30:48.362Z",
"mail": "",
"nick": "alw",
"url": "/posts/44755/",
"objectId": 1,
"pid": null,
"rid": null,
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
},
重新让AI再生成SQL导入后就能正常显示了。
索引错误
共导入了202条旧数据进去,新建评论测试时发现接口报错提示id索引重复。我估计是因为我导入的旧数据,生成id与这202条的id是重复了,所以我需要把索引调整成从203开始。问了一下AI,调用SELECT SETVAL('wl_comment_seq', 203, false);就可以正常评论了。
QQ通知
接着就折腾通知功能,好让我知道并及时回复评论。配置了半天还是不成功,日志信息也定位不出来,相关问题也无法找到。于是就下拉了代码在本地调试了半天,最终测试发现调用QQ通知接口,返回btwaf is from-data error,搜了一下是宝塔拦截了from-data相关数据,于是修改了代码使用x-www-form-urlencoded本地测试正常,并提交了合并请求。