分类

从 jekyll 切换到 zola

2019-08-15 12:55 misc

最近写的博客多一些, 也更加厌烦了 jekyll, 它对 markdown 支持的问题. 前天时间 多一些, 就找到了 rust 静态网站工具, zola.

首先是源代码更新还比较频繁, 社区也蛮活跃. 翻了官网的文档, 也蛮简单的. 初步考察之后, 就决定尝试着把博客迁移到 zola.

安装

对于 debian 系统, 官网并没有提供相应的安装包, 只好从源码编译.

从 zola github页面 下载好源码后, 可以用 cargo 来编译并安装它:

$ cargo install --path .

如果下载 crates 比较慢的话, 可以修改cargo 使用国内代理.

生成博客基本目录结构

生成项目名为 blog 的目录:

$ zola init blog

期间, zola 会询问一些项目基本信息, 填写完成后, 生成了的 blog 目录有以下结构:

$ tree blog
|-- config.toml
|-- content
|-- sass
|-- static
|-- templates
`-- themes

其中:

  • config.toml 文件用于管理整个项目的配置, 比如是否开启索引, 是否启用语法高亮等.
  • content 目录用于放置博客正文以及相应的资源文件.
  • sass 用于放置 SASS 样式文件, 可以编译为 css 文件.
  • static 用于放置全站静态文件, 里面可以放 favicon.ico, images/, stles/, js 等. 里面的内容会完整地复制到生成的目录中.
  • templates 目录用于放置页面模板, 模板使用 tera 引擎渲染.
  • themes 目录可以放第三方定义的主题包.

设置 config.toml

项目配置比较简单, 主要是开启了语法高亮和文章分类 (categories):

# The URL the site will be built for
base_url = "https://blog.biofan.org"

title = "少华的博客"
description = "轻风拂山岗"
#default_language = "zh"
generate_rss = true

# Whether to automatically compile all Sass files in the sass directory
compile_sass = false

#theme = "even"

# Whether to do syntax highlighting
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
highlight_code = true
highlight_theme = "monokai"

# Whether to build a search index to be used later on by a JavaScript library
build_search_index = false

ignored_content = ["*.swp"]

taxonomies = [
    {name = "categories", rss = true, paginate_by = 10},
    {name = "tags", rss = false, paginate_by = 10},
]

[extra]
# Put all your custom variables here

[extra.author]
name = "Xu Shaohua"
email = "shaohua@biofan.org"

要注意的是, zola 并不会监控 config.toml 文件的更新, 所以当修改了它之后, 需要 手动重启一下 zola.

添加新文章

要添加一篇新的博客, 只需要在 content 目录里加入一个新的 markdown 文件即可, 为了方便, 我修改了之前的自动生成新博客的脚本:

#!/bin/bash
# Copyright (c) 2017 Xu Shaohua<shaohua@biofan.org>. All rights reserved.
# Use of this source is governed by General Public License that can be found
# in the LICENSE file.

set -xe

# Create a new article template.

ARTICLE=$1
if [ -z "${ARTICLE}" ]; then
  echo "$0 article-name"
  exit 1
fi
TIMESTAMPE=$(date --rfc-3339=seconds)
FILENAME="content/$(date +%Y-%m-%d)-${ARTICLE}.md"
URL_PATH="$(date +%Y)/$(date +%m)/${ARTICLE}"
echo "TIMESTMAP: ${TIMESTAMPE}"
echo "FILENAME: ${FILENAME}"
echo "URL_PATH: ${URL_PATH}"

if [ ! -f "${FILENAME}" ]; then
  cat > "${FILENAME}" << EOF
+++
title = "${ARTICLE}"
description = ""
date = ${TIMESTAMPE}
path = "${URL_PATH}"
[taxonomies]
categories = []
+++

<!-- more -->

EOF

fi

vim "${FILENAME}"

使用也很简单, 比如本文就是这样生成的:

$ ./new-article.sh replace-jekyll-with-zola

zola 的优势

这几天体会到的 zola 有这些优点:

  • 快, 超级快, 七八十篇文章, 只花了0.2秒就能生成完, 在之前用 jekyll 时需要数秒时间.
  • 简单, zola 命令只有两三个参数, 使用非常简单.
  • zola 自带了数十个语法高亮主题, 常用的 monokia 也在其中.
  • tera 模板简洁够用, 能完全满足目前的需求.

除了上面提到的优势, zola 还是有些缺点的, 比如:

  • rss 功能不太完整.
  • 不是开箱即用的, 需要花些功夫配置一下主题等.
  • 源代码中自带的模板示例并不完整, 没有展示出 zola 的全部功能.

其它问题

目前, main 分支 (版本号是 0.8.0) 的 zola 存在一些 bug, 比如:

  • draft = True 的实现有歧议, 这样的页面依然会被渲染和发布
  • 生成的 rss.xml 文件里的 URL 地址被转码, 不能正常打开

这些问题在 next 分支 (版本号是 0.9.0) 被修正了, 可以下载代码并 安装 next 分支.

参考