LetTTGACO/elog

[特性]求支持同步源文件检查

Closed this issue · 12 comments

MiiW commented

目前我的博客部署环境在K8s中,容器启动时会自动从git下载hexo博客源码,然后使用elog同步语雀文档,然后执行hexo生成内容并部署网站。由于语雀webhook的缺失,导致整个流程的触发是缺失的。因此有以下一个想法:
启动一个后台进程,定时的去使用类似elog check的功能,对比缓存文件检查文档是否有更新,如果有,则重新部署容器完成博客的重新部署。这样,整个环境的搭建和运行就只有K8s和语雀服务,架构上更简洁。

求评估下这个elog check的特性是否可以支持?

是个非常好的想法,我评估一下

不过你这个模式 其实可以写个定时脚本,定时 elog sync 也可以实现,elog 本身就是增量更新,也可以实现你的需求。也不需要判断了

不过我不确定 定时 hexo 部署 会不会影响网站访问

MiiW commented

不过我不确定 定时 hexo 部署 会不会影响网站访问

定时的话,就会有很多无效重部署,频率很难取舍。我的博客因为没套CDN,所以部署期间会中断的。

image image

大概试了下效果,可以实现,看下是不是你想要的结果

image 没有文档就会自动结束了

还有另外一种实现,就是不通过 cli ,而是暴露出 api,你自己引入 api,自己判断isUpdate返回值来运行命令。反正都是基于 Node JS,或者用 shell 运行 js 实现

好像根本不用 check 命令,有点多次一举,直接用 elog sync命令,每次定时同步就运行它,像我这样用 node 子线程去判断,如果输出包含「同步成功」就说明有文档修改,然后再用 node 子线程去运行 hexo 的部署命令。如果输出包含「没有需要同步的文档」就终止运行

MiiW commented

还有另外一种实现,就是不通过 cli ,而是暴露出 api,你自己引入 api,自己判断isUpdate返回值来运行命令。反正都是基于 Node JS,或者用 shell 运行 js 实现

API就行,感觉这个需求比较定制,先放个API吧?这个需求要的用户多了,再加到子命令里就可以~

定时 用 node 运行以下 js

const { spawn } = require('child_process');
// 运行 Elog 同步命令
const child = spawn('elog', ['sync', '-c', 'elog.config.notion.js', '-e', '.elog.env', '-a', 'elog.cache.notion.json']);


let elogStr = ''

child.stdout.on('data', function(data) {
  // 打印输出elog日志
  const log = data.toString()
  console.log(log);
  elogStr += log
})

child.on('close', function(code) {
  // 同步结束时,判读输出日志有没有包含「同步成功」字符,如果有就表示有文档更新

  if (elogStr.includes('同步成功')) {
    // 运行 hexo build 部署命令
    const child = spawn('pnpm', ['run', 'docs:build']);

    let hexoStr = ''
    child.stdout.on('data', function(data) {
      const log = data.toString()
      // 打印输出hexo build 部署日志
      console.log(log);
      hexoStr += log
    })

    child.on('close', function(code) {
      // 部署结束
      // TODO 可以记录日志到本地
    })
  }
})

或者在 linux 如此运行
image

现有就可以实现,后续可以考虑暴露 相关 API,用户自定义逻辑

MiiW commented

现有就可以实现,后续可以考虑暴露 相关 API,用户自定义逻辑

好的,我试试看