Octopress用了应该超过一年了,感觉还不错,看到了不少迁移到基于Python的Pelican和基于nodejs的Hexo,不过暂时我还没打算迁移过去。因为到现在才刚刚适应Jekyll的环境,虽然生成的时候确实非常之慢。
1.CDN加速
- 全站静态文件启动cdn加速。
这个似乎并不困难,但是我现在有200多篇blog,一篇篇来改显然不现实。我希望的是可以自动化替换,并且可以随时修改的。
暂时我没有发现scss和ruby变量通用的方法,所以scss里面专用一个变量,在octopress/sass/screen.scss的第三行加入一行$cdn_prefix:"http:cdn.example.com"
,这样便可以在各个scss文件中使用这个变量了。注意的是,scss语法中,字符替换和ruby的类似。是这样使用的:background: $page-bg image-url('#{$cdn_prefix}/images/back_gb.jpg') top center fixed;
,也就是说,'#{$var}'
这个$var
会被替换。
另外一个便是ruby代码和html模板中的变量。ruby代码中我使用的是Jekyll.configuration({})['cdn_prefix']
来读取_config.yml
中的配置,而html中则是使用{ { site.cdn_prefix } }
来替换字符。
2.增加分类列表
- category list tag
这个网上解决方案很多,而且还有云标签等不同的实现。问题是网上找的的好像都不支持中文。原因是他们处理超链接的时候没有采用Jekyll的默认方式,而是自作聪明写了一段代码。下面是我的代码。
2.1.注册插件
在plugins/
增加category_list_tag.rb
文件,内容如下
|
这里重点是第10行,#{category.to_url}
是关键,这样对中文的支持就没有问题了。ruby会自动把汉字转换成拼音,日语转换成罗马字母。
2.2建立aside模板
然后新建 source/_inclide/custom/asides/category_list.html
,内容如下:
|
2.3添加CSS
修改sass/custom/_styles.scss
,添加如下内容,这个自定义符合自己主题搭配的就好。
|
3.图像CDN加速
这里只是具体地讲一下,图像有两种。一个是markdown自身的,另一个是octopress/jekyll定义的。
3.1原生markdown语法CDN加速(原创)
这个比较麻烦,曾经一年多我都没有解决。前两天无意中解决了。过程不详细叙述了。这里只是简要说明下过程。因为我用的是kramdown
,所以如果你是用的rdiscount
,那么不用看这个了。
这里是系统级别的hacking,也就是给kramdown进行一个强制的硬编码。(我是这么想的,在自己的电脑上,kramdown被依赖到的可能性非常低。所以我就放心地hacking了。)
在Cygwin的gem都是被安装在了~/.gem/ruby/gems
下面,而Linux下面除了这个目录,还可能在/usr/lib/ruby/gems/2.1.0/gems/
下面,可以通过gem env
查看你系统的gem存放目录。在这里目录下面应该会发现一个kramdown-***
目录,这个目录下面lib/kramdown/converter/html.rb
,打开这个文件,搜索convert_img
,会找到一个def convert_img(el, indent)
定义的函数。原始的应该只有一行。我们要打一个patch,变成如下:
|
这里我用了_config.yml
里面增加的一个变量cdn_prefix
,如果你嫌麻烦硬编码也是可以的,只是这样下次修改cdn的时候方便些。
3.2 Octopress定义的语法加速
这个比较简单,网上到处都有,简单叙述下。 修改plugins/image_tag.rb
,如下
|
也就是增加第36行,这里也是用了_config.yml
里面增加的一个变量cdn_prefix
,你完全可以硬编码。
4.Pygment错误
较常见的是如下的错误
Error: Pygments can't parse unknown language: </p>
这个有一个辅助解决办法是修改plugins/pygments_code.rb
,如下
|
家下来可以根据出错提示,修改博客的markdown原文就好。
5.大量Configuration信息
实际上每执行一次Jekyll.configuration({})['cdn_prefix']
都会输出一次。如果不想见到满屏的这个提示。请按照修改kramdown
的方法,修改lib/jekyll.rb
,注释掉一行$stdout.puts "Configuration from #{config_file}"
。如果是2.4版本请修改/usr/lib/ruby/gems/2.1.0/gems/jekyll-2.4.0/lib/jekyll/configuration.rb
,就是注释掉一行 Jekyll.logger.info "Configuration file:", file
。