自从使用增量构建之后, 构建确实很快, 很方便; 但是某些公共的模板文件并不能一起更新, 比如: index.md archive.html categories.html tags.html,所以搞个触发构建的机制

问题

启动命令:
nohup bundle exec jekyll serve --drafts --incremental --trace &

这里使用到了增量构建选项:--incremental, 这样文件变动后只需要重新构建变更的文件即可, 所以非常快!

但是出现一个很坑的问题, 其中一个就是每当新建一篇文章后, 首页刷新最新的文章并没有展示出来, 及时重新启动也不好使, 必须去掉 --incremental 重新启动后才好使, 瞬间就感觉很尴尬了, 这么大的 bug 没有人发现么? 😆

思路

增量更新其实是只针对有变更的文件, 比如当前编辑的文章, 每次保存之后, 刷新浏览器就是最新的内容.

再比如当前文章修改了标题, 分类, 或者标签之类的, 当前文章刷新时是更新了, 而:
index.md archive.html categories.html tags.html 这些也是不会更新的

这个时候怎么办呢, 我最开始的笨方法就是: vim index.md 最后加个空行, 再保存一下, 再刷新就好了

可是不能每次都这么干吧, 关键是还得改回去, 另外还有其他文件也有这个问题, 那么是不是只修改一下文件的更新时间之类的就好使了呢?

解决

BINGO! 比如:touch index.md 再刷新首页就好使了, 干的漂亮!

这之前其实只知道 touch 是用来创建文件用的, 但是最基本的用法其实是来修改文件访问和修改时间!

有兴趣查查手册可以: man touch, 不过 Mac 跟 Linux 下的命令行有些参数有些差别的哦

来个脚本:flush_cache.sh

#!/bin/bash
#author:xu3352@gmail.com
#desc: change file access and modification times to regenerate pages 
#       (if jekyll start with --incremental option)

# file list
list=(index.md archive.html categories.html tags.html)

# for loop
length=${#list[*]}
for (( i=0;i<$length;i++ ))
do
    # echo "file $i:" ${list[$i]}
    touch ${list[$i]}
done

加个可执行权限, 需要的时候, 手动执行一下就可以了.

然后我把他加入到 new_post.sh 里了, 每次新建一篇文章完之后自动调用一次, 这样首页刷新也可以看到了

diff --git a/new_post.sh b/new_post.sh
index 98a6742..eeccc8b 100755
--- a/new_post.sh
+++ b/new_post.sh
@@ -35,6 +35,9 @@ else
     echo "file exists..."
 fi

+# change modification time to regenerate some pages
+source flush_cache.sh
+
 # edit file with vim
 vim _posts/$FILE_NAME

参考:



blog comments powered by Disqus

Published

12 August 2017

Tags