Change log

2022年7月24日00:16:21 更新增量blog更新功能,完善显示

项目路径

为了自己用着方便,花了一个钟搞了一个远程到服务器执行hugo更新的脚本。这样我本地就可以用比较熟悉的Typora写blog了,写完直接一运行脚本,完活儿~

具体直接看项目就可以了。

不过这样小的项目居然还让我踩了几个坑,记录一下算是第一个技术文档好了。

关于paramiko执行的小坑

这东西还挺好用的,但是确实有坑。

  • 如果用exec_command来执行脚本,必须sleep一下等待完成。这个并不会阻塞,而是直接把命令怼过去。同理,invoke_shell也会因此出现还没完成命令就超前发送的情况。
    • 解决方案:要么用管道符 | 进行处理, 要么用 ; 进行命令处理(比如hugo需要切工作目录), 要么sleep一下。
  • invoke_shell 用recv会显示不全。我怀疑和上面的情况一样,因为你推送这条命令的时候终端的行缓冲器其实 没有刷新完所有内容,所以显示也不全。不过我这里只是 辅助调试一下,不是关键问题,无所谓。

已知bug

增量更新bug - fixed

目前,该方案实质上是全量替换所有md文件,所以说执行的时候会全量更新所有文章,会改变发布顺序……这 第二篇我就发现了。

从简单实现的角度,我决定加一个以md5校验作为基础的文件记录,将所有文件md5记下来,只上传有改动的……逻辑是,os.walk到文件时先检索md5存储文件里有木有相关项目,如果没有就即时存储md5。只上传新改动的文件就好了。

想了想,如果按这个逻辑来看,rsync要做的事情和校验应该好多哦,各种逻辑上的东西不简单。

无法更新文章名称bug

这是因为增量更新是以md5为维度建立的检索,而文件名不影响md5……这个也简单,就是多校验一次文件名。或者更进一步,校验文件修改时间。这其实就是简单实现一个rsync的小轮子