Jekyll

升级jekyll

要定期升级jekyll的版本,使之与github上的版本一致。

bundle update

kramdown

Jekyll使用了kramdown作为Markdown的解释引擎,其具有比标准的Markdown更多的扩展标记,因此也能提供更加丰富的表现形式。

支持的标签有:

小技巧

  • 在行尾加2个或更多的空格可以添加换行(<br/>)
  • 当缩进4个空格无法正确转义代码块中的标签时,可以使用 raw 块,参见本文档 gist 部分。
  • 可以通过将从其他软件(如JupyterExcel等数据处理软件)导出csv格式的数据拷贝到Markdown文档中,并借助于atom-csv-markdown插件来方便地将其转换为html表格。

Liquid

Jekyll使用了Liquid语言作为模板语言,其主要有三种类型:

  • object 可以直接生成html字符串内容

  • Tag

    • Control Flow: if, unless, elsif/else, case/when

    • Iteration: for, break, continue, for(limit, offset, range, reversed), cycle, tablerow

    • Variable: assign, capture

  • Filter map, sort, uniq, strip_html, url_encode, url_decode, etc

jekyll-gist插件

安装好gist-it插件后,设置好对应的token,就可以在Atom中直接 gist 代码片段了。

接下来,就需要在markdown文档中引用刚刚创建的gist

{% gist ericluo/8a94b03781aaa65941b6978c9b89c578 %}

Tips: 在上面的例子中,使用了标签来对代码块中的Liquid代码片段进行封装。如果不这样做,其将会被Liquid进行解析并翻译,这可不是我们想要的结果。

jekyll应用疑难问题

SSL认证

在Windows上启动jekyll以后,会碰到的问题如下:

  GitHub Metadata: No GitHub API authentication could be found. Some fields may be missing or have incorrect data.
  Error: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

主要解决的问题有:

  1. 下载证书< https://curl.haxx.se/ca/cacert.pem>,并设置环境变量SSL_CERT_FILE指向该文件
  2. 设置GitHub Token相关的环境变量JEKYLL_GITHUB_TOKEN
  3. 升级Rubygems的版本到最新版本
  gem update --system

文章无法显示

今天碰到一个问题,新写的帖子再本地和GitHub上均无法显示,好像是丢失了。但是查看文件缺失在哪里。最后最终到原因在于在_config.yml中设置的时区,导致其认为是一个将来的帖子,自动忽略了,没有生产对应的文件。解决这个问题可以在启动时加上 future 的开关。

bundle exec jekyll server --future

还有一个坑是总是报错说错误地使用了post_url这个Tag,即:

正确的写法如下,其中指向文件目录为相对应_posts的相对路径,且文件名可以不用添加后缀名。而使用link这个tag的时候,文件路径是相对于根目录的,且文件名必须加后缀名。详细调用方法参见http://jekyllrb.com/docs/templates/

{% post_url file_name %}
{{ site.baseurl }}{% post_url file_name %}

错误的写法:

{{ post_url filename }}

但是,将错误的写法改正后,系统还是报原来的错误!经过网上查找相关解答,似乎是当前Jekyll的版本(3.3.1)的一个缺陷。GitHub Pages升级后,试试新版本的Jekyll还有没有类似的问题。 github-pages的版本升级到129以后(对应的Jekyll的版本升到到了3.4.3),改问题解决了。

经测试,使用{% link relative_url %}没有问题:kissing_smiling_eyes:。使用{% post_url filenmae %}也没有问题,但是控制台上会报错,而且与其文档中要在文件名前添加子目录的说法也不一致。