分类

从 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 分支.

参考