Hugo:文章发布后最后修改时间不一致问题

Posted by Nefelibata on Sat 2024-03-30 | | about 2 mins
Last Modified on Thu 2024-05-23

1 显示效果

目前的显示效果如下,每篇文章可以正常显示最后修改时间。

image-20240330120121711

但是之前, 这两个地方都是显示同一个时间,那就是最近一次 git 提交时间的8小时之前。

一开始以为是主题修改了,导致时间会改变,尝试了不修改主题内的东西,还是一样的结果。

config.toml 中也都是设置正确的:

1[frontmatter]
2  lastmod = ['lastmod',':git',  ':fileModTime',  'date', 'publishDate']

问题是,在本地进行 hugo serve 的时候,本地的效果是正确的。那么我就开始考虑是发布的时候,github acitionworkflow 出现问题了。

1.1 排查 timezone

.github\workflows\deploy.yml 中添加如下代码:

1- name: Set timezone
2  run: echo "TZ=Asia/Shanghai" >> $GITHUB_ENV

发现发布以后,时间变成发布的时间了,但是每篇文章还是一致的,所以不是发布时间的问题。如果要以 git 发布时间来作为最后修改时间,可以改一下这一项。

1.2 排查 workflow

在进行 workflow 排查的时候,想起来对于 workflow 来说,有一项是在服务端进行如下操作的:

1- name: Build Web
2  run: hugo

在服务端进行 hugo 构建的话,就有可能会携带的 lastmod 信息被重建,从而导致时间不准,遂进行改进。

2 解决方案

2.1 修改workflows

.github\workflows\deploy.yml 中的上述代码注释掉,也就是:

1# - name: Build Web
2#   run: hugo

2.2 推送public

这时候,我们的思路是:在本地进行 hugo 的构建,然后将 public\推送到GitHub Pages,从而避开在服务端进行 hugo 构建的操作。于是就有了接下来的操作。

原先,在 themes\hugo-theme-cleanwhite\.gitignore中 忽略了 public\的推送,这时候将它注释掉:

1# public/

然后,如果在 git 推送的时候没有进行 hugo 构建的话,那么得在流程上加上 hugo构建,也就是:

1hugo
2git add .
3git commit -m "update"
4git push origin master

至此,以及可以通过本地构建,修复这个最后修改时间不一致的问题了。

3 后续思考

其实这个问题并没有根本上解决,理论上是可以在服务端进行hugo 构建的,后续可以继续排查,可能是还有什么bug没有找到。