blog/source/_posts/Recent-changes-in-my-blog-arch.md
thislight 931d3706ee
All checks were successful
Build & Depoly / Depoly blog (push) Successful in 1m2s
added post: recent changes in my blog arch
2024-06-07 23:55:39 +08:00

68 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 博客最近的架构改动
tags:
- 博客功能更新
date: 2024-06-07 23:52:10
---
是的我又回来了。最近打算写一篇关于数据驱动UI的博文于是我又关注起了我的博客然后发现有个事项好像还没做更新博客的构建。正好我自己的Git托管服务也搭得差不多了我就考虑把构建迁移到我自己的服务上。当然现在这种情况再用GitHub Pages不方便——于是网页就换成Cloudflare Pages托管。
这就是这次架构更新的大概方向。不过,这次改动中我确实遇到了一些问题,这些才是有意思的部分。
<!--more-->
## Hexo的增量构建
不知道之前有没有人注意博客文章的时间所有博客文章的更新时间都是一样的而且实际上没有任何更新xD。我一直以为Hexo只能一次构建全部页面但是这次我想顺便看看有没有增量更新的方案——然后我就发现Hexo其实是支持增量更新的[GitHub issue](https://github.com/hexojs/hexo/issues/2920))只需要保留`db.json`和生成产物文件夹`public`就可以了。
所以我在构建的时候,直接将它们缓存起来,这样就可以最小化每次构建的变更([Actions工作流描述文件](https://code.lightstands.xyz/Rubicon/blog/src/commit/4bdac4215e3562a9d41ea9307df6a986fab4084f/.forgejo/workflows/depoly.yml))。
````yaml
# ...
- name: Cache Generated Files
id: files-cache
uses: actions/cache@v4
with:
path: |
public/**
db.json
key: generated-files-1
# ...
````
当需要重新构建整个网站的时候只需要改一下key就可以了。我想到这回事是因为另一个惨痛教训……
## actions/checkout@v4无法检出LFS文件
这次迁移还涉及到另一个我想试用的新东西:[Git LFS](https://git-lfs.com) (Large File System)。作为一个博客有点二进制大文件再正常不过了图片、pdf、幻灯片……所以我按照说明在本地安装了程序、设定参数、Commit、推送、等待部署。看起来一切都挺好然后我就睡觉去了。
第二天起床打开某篇文章一看我的图片呢打开开发者工具查看一下网络请求是有这个文件但是好像不是图片而且统一在130字节左右。我知道检出LFS需要一个额外的下载过程所以我检查了一下actions/checkout@v4发现它有一个默认不启用的`lfs`参数。
看来就是这个问题,我就打开了这个功能,等待图片回到我的网站。
````
[command]/usr/bin/git lfs fetch origin refs/remotes/origin/master
fetch: Fetching reference refs/remotes/origin/master
...
error: failed to fetch some objects from 'https://code.lightstands.xyz/Rubicon/blog.git/info/lfs'
::remove-matcher owner=checkout-git::
::error::The process '/usr/bin/git' failed with exit code 2
````
“?”
是不是遇上了和Forgejo Actions一样的网络问题DNS不生效导致我没办法隔离执行actions的网络我怀疑是因为我手动将代码托管网站指定为内网地址造成的于是我登上服务器修改了hosts问题依旧。
然后我就只能在网络上漫游,寻找一个答案。然后,啊哈,我发现你啦!就是这个:[#164 'actions/checkout@v3' with LFS fails because of double auth header on gitea.com/gitea/act_runner](https://gitea.com/gitea/act_runner/issues/164#issuecomment-739631)。
原来这个是actions/checkout的bug它会为两个相同的域名设置相同的HTTP头用作验证导致HTTP头重复了。如果HTTP服务器比较严格的话就会拒绝服务。因为我没在Nginx的日志里找到相关信息只能死马当活马医先试试他的workaround结果就能用了。
但是增量更新没有更新老文件,于是我再重新生成整个网站,图片这下就出现了。
大概是LFS用的人真的不多吧。
## Robots.txt
这个是我偶然发现的。我想用Google的PageInsight看一下我网页的加载速度自我得瑟一下xD。然后发现在SEO这项下面提示Robots.txt格式错误里面是我的主页。
这大概是因为Cloudflare Pages对所有文件名找不到的请求返回主页`index.html`有人把这个叫做“伪静态”所以如果没有Robots.txt它也会返回主页。这也是个GitHub Pages没有的功能所以我也没注意。为了正常被索引我只好自己添加了一个空的Robots.txt。