评论系统数据库从 Leancloud 更换为 Deta
前言
因为我的 waline 评论系统选了 Leancloud 数据库,最早是用的国内版,速度还行,后来变更通知不再为国内用户服务,需要备案才能使用,听到这通知我傻眼了!现在真是不走备案不让用了啊!它后来出了国际版,我就去用国际版了,就是速度非常慢 —— 但也勉强还能用…… 后来我去琢磨了 Mongodb,完全看不懂啊~~好复杂的样子,可能是我太笨了
这几天也看了 Mongodb 教程,也还是一头雾水,就是最后的多 IP 地址总是搞不明白,于是乎又放弃了……
后来想到我的博友小波他是换了 Deta Base 做数据库了,我也是试试吧!万一这次成功了呢!
于是开始动手啦~
备份评论数据
首先要提前备份评论数据!Leancloud 和 waline 后台的数据都要导出来,防止后续导入会出错噢。这是必要流程!
Leancloud 导出要点你的评论应用,点击 “数据存储”——“导入导出”,然后在右边选择 “数据导出” 页面,在下方勾选限定Class, 确认是否勾上全选,最后可以导出啦!
文件会发到你的邮箱,文件是比较长的一串数字,记得改个名加个日期以防混乱,比如 “Leancloud 评论导出 2024-01-01” 这样的名称。
waline 后台是你部署平台的后台,在后面地址输入 /ui 就能进入管理后台了。例如:
https://waline.com/ui |
然后点击 “导出”,稍等一会儿,浏览器就会出现文件下载了。
如果导出没反应,就多点几次,浏览器就会出现下载文件的。
json 数据拆分
从后台导出的 json 文件较大,比如我评论系统有 1000 多数据文件就有 1.1M,如此大的文件在后续导入过程中会出现导入错误的情况,这时候我们需要分批导入,也就是把数据拆分出来!分批导入就不会有问题了!由于我不会写 Python 代码,于是我去向 chatGPT 请教了下,它帮我写出了拆分代码,我也放出来给大家参考,我是 waline 评论系统,你们要根据自己的评论系统情况更改。如果你的数据量较少,100 条左右的话就不用拆分了,直接导入即可。
把下面代码复制到文本编辑器,另存为 waline_chunk.py 文件,其中 input_file 和 chunk_size 请自己修改。
# 将waline评论数据json文件拆分,按每100块数据拆分成多个小文件 |
然后打开命令提示符输入下面命令就可以了。
Python waline_chunk.py |
Deta 部署
现在 Deta 改版了,网页大变样!之前还是需要命令行操作呢,现在全程只需要在网页操作了,十分方便~对噢,想起来以前官方也说过未来会出 web UI 版,现在已经实现了,真不错!
我是在 vercel 部署了,就不用在 Deta 部署了,如果想要在 Deta 部署,可以点击下面 waline 文档链接操作,很好弄的!
链接:Deta 部署
部署完后界面长这样!它是一种卡片形式的,刚部署完 waline 的卡片特别小,你需要自己去拖动变大,下次就会好找了~
开发人员命令行操作
如果你是开发人员,可以下载 Space-Cli 输入命令行操作,官方仓库下载:https://github.com/deta/space-cli/releases
官方文档也有命令行帮助:https://deta.space/docs/en/build/reference/cli
我还以为用 Space-Cli 能克隆下项目呢,没找到相关的选项,看来 waline 是只能在网页操作了,省去这一步骤了。
配置环境变量
接下来配置环境变量,如果部署在 Deta 上,就不需要配置环境变量,Waline 默认会使用 Deta Base 作为数据库存储数据。如果是部署在其它地方,需要配置以下环境变量。
| 环境变量名称 | 值 |
|---|---|
| DETA_PROJECT_KEY | deta 项目的密钥 |
Deta
如何配置环境变量呢?在 deta 项目用鼠标悬停会出现个黑色圆圈,点击它就会出现选项,点击 “Open settings”
然后点击 Configuration,下面就是环境配置了,可以边看 waline 官方文档来对照配置。
需要注意:Deta 环境配置不宜写过长的代码,也就是邮件通知配置无法写入自定义的 Html 代码,只能用默认模板了,不知道以后官方能不能放开环境变量的长度。
另外也要注意下邮件通知是否顺利,若是无法收到邮件,请更换别的邮箱运营商。就我目前测试 QQ 邮箱无法收到邮件通知,gmail 可以收到通知。
vercel
如果是部署在其他平台上,比如 vercel,我们就需要创建 Key,才能在其他平台上使用 deta 的数据库。
依然是打开 “Open settings” 设置,点击 keys,在下方点击 Create new deta Key
然后就会自动生成 Key 密钥啦!记住这个密钥只出现一次,要赶紧点击右侧的复制按钮,复制下来到文本里,以防忘记!
然后我们去 vercel 评论系统项目,点击 Settings——Environment Variables,在右侧的 “Key” 填入 DETA_PROJECT_KEY,后面的 value 就是咱们刚才创建的 Key 啦!填完后点击 Save 即可。
填完后我们要重新部署,因为环境变量还没有更新生效,点击上方的 Deployments,点击第一个构建的...,下拉表点击 Redeploy,然后确定 Redeploy 即可。
数据库迁移
从一个部署平台迁移到另一个部署平台,评论后台是不一样的,需要重新注册,第一个注册的人就会成为全局管理员,才能使用后台。
在地址栏后输入 /ui 即可进入评论系统后台。
在这过程当中我遇到了 504 错误,我查了下,可能是因为 vercel 有限制,全部导入会有问题,要分批导入,感觉好像是只能导入 100 条数据,就用前面 json 数据拆分那部分一个个导入吧!
不过我尝试了两次仍然还是 504 错误,我觉得可能数据量太多了 vercel 不受理,我就换成在 deta 后台试试了,结果它导入很快!看来是部署平台的问题啊,如果导入失败了,那么就再导入一次,它就导入成功了!看下博客评论效果吧,很完美迁移过来了~
注意 评论导入会覆盖前面的评论,会导致之前的评论也删除,vercel 导入有限制,我建议是在 Deta 后台导入,我尝试了很多次导入,都很顺利导入成功了!推荐用 Deta 部署在后台导入~查看数据
怎么查看数据呢?在 Deta 项目中点击黑色圈圈,点击 View App Date,在 Base 下就可以看到评论数据啦!别忘了开启 Edit Mode,就可以对数据编辑了。
和 Leancloud 操作差不多,都是表格形式的,很直观,就是没有批量操作,以后应该会出个批量操作功能。
对了,Deta 也可以导出数据,在 Export 页面点击 Export 按钮,就可以导出了!稍等一会儿,然后再点击下 Refresh 刷新下,就可以下载了!
Deta 数据库 comment 表字段说明
| 字段名 | 说明 |
|---|---|
| key | 评论的唯一标识,回复对应关系使用 |
| comment | 评论内容 |
| insertedAt | 插入时间 |
| ip | 评论者 ip |
| like | 评论爱心统计 |
| link | 评论者网站地址 |
| 评论者邮件地址 | |
| nick | 评论者昵称 |
| objectId | 评论者的评论唯一标识 id |
| pid | 回复的对应评论 id |
| rid | 整条评论的 id |
| status | 审核状态 |
| ua | 浏览器 |
| url | 页面地址 |
| user_id | 注册帐号 id |
| createdAt | 创建时间 |
| updatedAt | 更新时间 |
Deta 数据库 Counter 表字段说明
这一块应该是阅读量统计计数的数据
| 字段名 | 说明 |
|---|---|
| createdAt | 创建时间 |
| time | 阅读量次数 |
| updatedAt | 更新时间 |
| url | 关联文章地址 |
| objectId | 唯一标识 ID |
最后还要检查下导出的 json 数据是否有漏下的评论,就去后台补上,这就要花时间手动检查了。早期评论有些显示不出来,可能是因为没有添加 status 数值,添加上就可以显示了。因为 waline 每个版本都在更新功能,所以需要自己仔细排查。
在 json 数据添加审核通过属性:
"status": "approved", |
还有一些回复评论的 objectId 指向问题也要排查,早期评论是这样:
<a class=\"at\" href=\"#454sdf4f84sdkflakh\">@SaraKale |
需要把它们都改成这样的格式,才能正确显示出来。
[@SaraKale](#454sdf4f84sdkflakh): |
其他修改
url 地址路径批量重定向
由于我的站点 url 路径末尾是加了.html,以前部署的时候没有想到镜像站的同步问题,后来才发现镜像站 netlify/Cloudflare 路径和 github 路径不一样,必须要关闭 Hexo 选项的 pretty_urls 选项末尾的.html 才能同步评论数据。为什么会部署不一样哇,简直无语……
后来我去问了下 ChatGPT,原来是为了提高 SEO 啊……
Netlify 默认情况下会处理网站的 URL,将末尾的.html 去掉,以提供更简洁的 URL 结构。这是一种常见的做法,有助于提高网站的用户友好性和搜索引擎优化(SEO)。
不过我还是让它帮我写个脚本,把末尾修改为斜杠吧,为了能让访客都能看到评论,我还是去掉 html 后缀了,这样能随时交流了~你也可以根据自己的需求修改。
我顺便去 Cloudflare 也做页面永久重定向了,以前的文章路径会跳转新的路径,不会有 404 问题了~
# 在/blog/posts/末尾插入斜杠/ |
也可以在网站根目录创建_redirects 文件,添加下面的规则,会把页面全部重定向。
/* /:splat.html 200 |
或者在 netlify.toml 文件中:
[[redirects]] |
json 时间排序
从 Deta 后台导出 json 文件我发现,Deta 评论的 Key 值似乎是以数值较小的排在前面,如:
9007199254468113 |
所以最新评论排在前面是因为 Key 值数值较小,所以才能看到最新评论,怎么会如此…… 难道不是最新评论的 Key 值最大吗,因为是慢慢增加的啊,完全搞不懂 Deta 的排列顺序,怪不得在导入的时候有评论是排序错乱了……
所以我又去找 chatGPT 帮我写个时间排序脚本,这样评论不会错乱了!
# ======================== |
好了,现在已成功换成 Deta 数据库了,这下应该加载很快了吧!终于摆脱掉 Leancloud 了!呜呜果然要勇敢尝试下才知道呢,再也不用看复杂的数据库了!我觉得 Deta 就挺好的!哈哈哈哈!
小伙伴看看有没有遇到什么 bug~有问题就在评论反馈吧!
参考文章
如果遇到评论加载不出来,请不要担心,稍等一会儿,等待服务器后台修复即可,或者过一段时间来看看~










