老blog重启之升级Hugo
升级Hugo
众所周知,这个站使用的Hugo生成的,过去的两年时间一直没写过,hugo已经迭代了很多版本,导致今天尝试了一下发现Action构建的时候各种错误,于是开启了升级之路
升级主题
首先出现的构建错误提示:INFO deprecated: .Site.Author was deprecated in Hugo v0.124.0 and will be removed in a future release. Use taxonomies instead
,搜索发现解决方案,新版本的hugo不再支持使用**.Site.Author**来获取作者相关信息。
解决方案:
- 首先去查了一下原主题的作者有没有更新这个主题,很好两个月前更新了,于是快乐的合并到我的修改分支上,重新deploy,还是失败。
- 猜测原主题没有适配新的hugo版本,以及没有使用最新的hugo来构建(我每次构建都使用的latest)。于是clone下来合并好的修改版主题继续修改
- 使用VSCode打开该主题项目,搜索**.Site.Author**,按照说明将所有用到这个参数的地方全部改成.Site.Params.Author,大概有几个地方,例如邮件,名字,主页等等。修改完之后,打开hugo的配置文件 config.toml or config.yaml ,在里面修改原来的
[author]
配置,将其改为[params.author]
,保存提交push,一气呵成。
module找不着之hugo mod
重新构建 错误日志是Error: failed to load modules: module "yinyang" not found in "/home/runner/work/blog/blog/themes/yinyang"; either add it as a Hugo Module or store it in "/home/runner/work/blog/blog/themes".: module does not exist
这个主题是通过submodule来配置的:
path = themes/yinyang
url = https://github.com/wxjer/hugo-theme-yinyang.git
[submodule "themes/hugo-notice"]
path = themes/hugo-notice
url = https://github.com/martignoni/hugo-notice.git
在构建脚本中:
# 检出代码,并拉取子模块
- name: Checkout Code
uses: actions/checkout@v3
with:
submodules: recursive # 拉取所有子模块
fetch-depth: 0 # 确保拉取完整的 Git 历史
这一块有问题,明明走了拉取,但是没有生成对应的themes/yinyang目录,导致识别不到,再次搜索发现现在的hugo开始使用mod来管理module,包括主题。 每一个hugo创建的站点,每一个hugo 主题都可以理解成一个module,将你的站点改为module,然后就可以添加别的module/主题。大概就是这样意思。 根据官方教程,使用最新的hugo创建一个新的站点之后发现,新的版本配置文件已经更改为hugo.toml,然后主题想要被识别为module,需要在主题文件夹下添加一个go.mod文件,里面的内容就是库地址:
module github.com/wxjer/hugo-theme-yinyang
go 1.23
以及所有支持的go的最低版本,我就写了个本机的go版本,将这个文件发布到主题库之后,然后在配置文件hogo.toml添加主题配置,其中path就是主题module配置文件里的地址:
[module]
[[module.imports]]
path = 'github.com/wxjer/hugo-theme-yinyang'
保存之后执行命令hugo mod init name
,意思就是将本项目初始化为hogo module,name随便写。
hugo mod init quickstart
# go: creating new go.mod: module quickstart
# go: to add module requirements and sums:
# go mod tidy
按照提示执行go mod tidy
,就OK了
可以执行一遍hugo server在本机跑一下。没问题
将所有修改提交,继续构建还是相同日志的失败!!
对比本地结构发现git上的库没有themes/yinyang文件,难道是这个问题,于是将本地的themes删掉,再次运行hugo失败,同样的错误。这下知道原因了。在本地将这个文件夹及子文件夹添加到git中,提交上去。再次构建
access token 错误
再次失败,日志大概的意思就是没有提交到git库的权限。我是用了两个库,一个私密库用来保存blog的源文件,然后将构建好的网站发布到GitHub的pages库,以**.github.io命名的那个库,所以应该是 personal_token: ${{ secrets.ACTION_ACCESS_TOKEN }}
这个token出现了问题,导致没有权限push到page库,打开token管理,发现之前的token不知道啥时候没了,于是新建一个,复制,然后打开pages库的设置,找到Secrets and variables下面的Actions,修改之前的ACTION_ACCESS_TOKEN
为新的token,没有的话则新建一个,名字无所谓,但是要跟Workflow里面取的值的名字一致,否则在action过程中,取不到该token值。
修改完毕后再次执行Workflow,终于成功了。
网站打不开?
构建完成后,打开4bug.cn,打不开,点开pages库的设置,找到Pages,在Custom domain里面看到是之前配置的4bug.cn,但是无法访问,点开旁边的custom domain帮助大概意思就是需要将这个域名重新验证一下,之前这个域名是通过阿里云管理的,后来迁移到Cloudflare了,按照GitHub的要求,打开个人页面下的Settings->Pages,在这里重新验证一下你的域名 验证通过后就是这个样子,然后去pages库的设置里面重新save一下,划重点,这时候取消掉Cloudflare的cdn加速,并且按照GitHub的文档,将这个域名的解析到GitHub的pages域名下,相关ipv4 跟ipv6的地址信息:
,子域名例如www.4bug.cn
解析到 **.github.io,等GitHub dns解析成功后,重新颁发https证书(勾选上强制https访问)后,访问一切OK后再打开CDN加速。
结束
至此,网站可以成功的访问,可以再次写一些没用的东西了。 致敬2024第一篇文章