详细问题说明

Gmeek前台文章全部不见了

可以到Github Pages里面的Code看下是不是没有了backup文件夹,里面有文章的md文件也没有。

再次去docs/post里面看看是不是也没有生成的文章html或者直接post文件夹也没有?

然后去Github Pages里面的Issues是不是文章都还在?Actions里面全局生成也绿色打勾没有发生错误,然后编辑一个文章,提交文章之后就红色X报错。

我是上面的那种情况的

然后我去手动新建添加backup文件夹,backup/11.txt 加11.txt是避免Github Pages把backup文件夹当成文件了,然后我去Actions全局生成,再去前台查看文章回来了,但是缺少了旧文章id为11-1的,然后再去Actions全局生成,发现情况又和前面的一样,文章全部不见了,backup文件夹我不见了。

解决办法

修改Gmeek.yml,在运行 Python 前强制创建日录(最稳妥)

在 .github/workflows/Gmcek.yml中,找到 -name:Generate new html 这一节,在 cd /opt/Gmeek/之后、
python Gmeek.py 之前,增加一行 mkdir -p backup。修
改后如下:

- name: Generate new html
  run: |
    cp -r ./* /opt/Gmeek/
    cd /opt/Gmeek/
    mkdir -p backup          # 新增这一行
    python Gmeek.py ${{ secrets.GITHUB_TOKEN }} ${{ github.repos[0].owner }}/Gmeek
    cp -a /opt/Gmeek/docs ${{ github.workspace }}
    cp -a /opt/Gmeek/backup ${{ github.workspace }}
    cp /opt/Gmeek/blogBase.json ${{ github.workspace }}

记得提交修改,然后去Actions全局生成,我生成之后发现之前缺少的文章id为11-1的还是少了。

解决文章缺少

删除缓存文件,强制全量重建
删除 blogBase.json 和 postList.json(如果存在),让Gmeek 忘记历史记录,重新扫描所有 Issues.
删除: blogBase.json(在仓库根目录,通常是 main分支)
1.进入仓库首页,确保当前分支是 main(或master)。
2.在文件列表中找到blogBase.json,点击它。3.点击右上角的垃圾桶图标(或..→Deletefile)。
4.输入提交信息,例如 Delete blogBase.json,点击Commit changes.
删除 postL ist.json(可能在根目录和/或 docs/文件夹下)

再次去Actions全局生成,然后去检查一下是不是全部文章回来了。

重新触发全局生成

1.进入仓库 Actions 页面。
2.点击左侧 build Gmeek 工作流。
3.点击右侧 Run workflow→确认分支为 main→绿色按钮运行。
4.等待约 30-60 秒,状态变为绿色打勾。

总结

整个过程的核心就是:
1.加一行 mkdir -p backup→解决目录缺失问题。
2.删两个缓存文件→解决旧文章不生成问题。
这两步操作安全、可逆、不影响文章源数据(Issues)。如果你以后重装或迁移 Gmeek,也可以按这个思路快速恢复。

mkdir -p backup 命令详解

mkdir 是什么?

mkdir 是 make directory(创建目录)的缩写。它的作用就是创建一个文件夹(在 Linux/macOS/GitHubActions 的虚拟环境里都通用)。
比如你执行 mkdir myfolder,系统就会在当前路径下新建一个名为 myfolder 的文件夹。

-p参数有什么用?

是:parent(父级)的缩写,它有两个很重要的功Q能:
·自动创建中间路径:比如你想创建a/b/c 这个文件夹,如果a或 a/b不存在,普通的 mkdir 会报错,但加上p后,它会自动把缺失的父级文件夹一并创建出来。
·不报错(如果文件夹已存在):如果 backup 文件夹已经存在,mkdir -p backup 不会报错,也不会覆盖里面的内容,它会静默地什么都不做,直接返回成功。
所以 -p是一个安全、稳妥的选项,适合在脚本里反复使用。

backup 是什么?

backup 就是我们要创建的文件夹的名字。它正好是Gmeek 用来存放 .nd 文章文件的那个目录。

合起来:mkdir -D backup 的含义

“确保在当前工作目录下存在一个名为 backup 的文件夹,如果不存在就创建它;如果已经存在,就什么也不做。

为什么要加到Gmeek.yml 里?
在你的工作流中,python Gmeek.py 脚本在生成文章时,会尝试把 .md 文件写入到backup/文件夹里。
问题在于:Gmeek 脚本本身不会自动创建这个文件夹。如果 backup 目录不存在,Python 的 open()函数就会报错:

FileNotFoundError: [Errno 2] No such file or directory: 'backup/xxx.md'

整个Actions任务就会失败,导致前台看不到任何文章。

说人话类比理解

想象你要往一个抽屉里放文件:
没有 mkdir -p backup:你直接伸手放文件,但如果抽屉不存在,你就会撞到木板(报错)。

有了 mkdir -p backup:你在放文件之前,先看了一眼抽屉。如果没有,你就立刻做一个新的抽屉;如果有,就直接用。这样文件总能顺利放进去。

md语法表格我感觉太麻烦了,我直接放下面截图说明,压缩了,大致的看一下就行了

添加的修复Gmeek代码说明

加上这行命令后,再也不用担心因为 backup 目录丢失而导致文章生成失败的问题了-它会在每次运行时自动“补”上这个目录。

如何减少手动删除操作步骤?

如果你希望每次手动运行 workflow_dispatch 时自动删除 blogBase.json和postList.json,可以修改 .github/workflows/Gmeek.yml,在 Generate new html 步骤之前加入:

- name: Remove cache to force full build
  run: |
    if [ -f blogBase.json ]; then rm blogBase.json; fi
    if [ -f docs/postList.json ]; then rm docs/postList.json; fi

将这个步骤放在 cp-r./* /opt/Gmeek/ 之前(注意路径,因为此时工作目录是仓库根目录)。这样,每次手动运行时都会先删除缓存,然后执行全量构建。但注意:这会导致每次手动运行都很慢(因为要处理所有文章),如果你文章数量很多,不太建议频繁使用。日常还是依靠自动构建,只在需要同步图片时偶尔手动运行。

删除缓存postList.json和blogBase.json只在你手动点击 Runworkflow 时才会发生。
日常写文章不会触发删除,因此不会导致不必要的全量重建(节省时间)。

加入的地方示例代码

- name: Remove cache to force full build
  run: |
    if [ -f blogBase.json ]; then rm blogBase.json; fi
    if [ -f docs/postList.json ]; then rm docs/postList.json; fi

- name: Generate new html
  run: |
    cp -r ./* /opt/Gmeek/
    cd /opt/Gmeek/
    mkdir -p backup
    python Gmeek.py ${{ secrets.GITHUB_TOKEN }} ${{ github.repository }} --issue_number '${{ github.event.issue.number }}'
    cp -a /opt/Gmeek/docs ${{ github.workspace }}
    cp -a /opt/Gmeek/backup ${{ github.workspace }}
    cp /opt/Gmeek/blogBase.json ${{ github.workspace }}

空格缩进混乱

如果代码空格缩进混乱的话,就会格式不对,代码就会有下划波浪线〰️,实在不行,就复制下面的代码缩进替换上面我们写入的缩进就好了,下面是缩进错误❌,示例图:

Gmeek.yml代码缩进示例图

话外题发现说明

我的文章(Issues)总数量是41的时候,前台发现缺少11-1的旧id文章(backup文件夹里面的文章md文件也是缺少这些),然后总数量是42的缺少的是12到1的旧id文章。
然后发现Gmeek官方博客的搜索标签的总标签文章数量也是30,它的后台Issues总数量是多少我没有去具体查看。

→转载请注明出处←