记一次qexo说说Error500崩溃

表现

在一次用手机(IOS18.1 safari)更新说说的标签时,成功发布说说,但是qexo后台访问说说页面时直接报错Error 500,表现为页面https://qexo地址/talks.html页面报错如图,但是其他后台管理页面正常。尝试通过qexo配置手册里的修复、重新部署均无法恢复。
崩溃页面

排查

搜索qexo的issues,尝试查找500关键字,发现有关回答与数据库相关,于是想到可能是数据库字段内容出错导致炸了。

我使用的是qexo一键部署至vercel,数据库使用的是neondb
如果你使用的是其他部署方式,或自建服务器方式,请根据自己的情况查看数据库表格的存储位置

打开vercel,进入到qexo项目,在Storage选项内,右边有Open in Neon按钮,点击后进入数据库后台,如图,在BRANCH——Tables——hexoweb_talkmodel中可以看到奇怪的一点:
time字段,测试崩溃的数据值为NaN,猜测是数据库没对time字段,或是qexo没对该字段进行约束导致,可能是手机在更新说说时,意外的在时间字段传入了NaN,导致qexo说说后台无法正常读取数据,从而报错。
Neondb后台

Bug复现

正如上图,在qexo后台说说管理页面,随便新建一条说说,将更新于:(yyyy-mm-dd hh:mi:ss格式),直接写上NAN(删除时间留空是可以的,会自动捕获当前时间并转换为Unix时间戳),能够正常提交说说,但是当再次进入说说管理页面时,就报错了

解决

进入neondb后台管理,将time字段的值改为正常的Unix时间戳,可以用时间戳转换器进行转换,或者嫌麻烦,直接填写上下类似的值,并Save change即可。等待数据库update数据之后,再次进入说说页面就正常了
Screenshot_28-11月_02-46-03_9311.png

后记

已同步提交此bug至qexo issues,向作者反馈问题,后续如有更新可能会修复bug


记一次qexo说说Error500崩溃
https://inkcodes.com/2024/11/28/记一次qexo说说Error500崩溃/
作者
Specialhua
发布于
2024年11月28日
更新于
2024年11月28日
许可协议