老早以前看到Octopress这个东西一直没时间折腾,刚巧刚才开了自己的GitHub Pages,顺便鼓捣了一下Jekyll(Octopress的核心部分)。
Jekyll是一个Ruby写的静态化站点生成器,特点是blog-aware,就是说适合拿来写博客。Jekyll支持多种markup languages,包括Markdown和Textile。就是说你用Markdown写文章,然后设计HTML模板(包括CSS、图片等等),最后运行Jekyll,自动帮你生成静态页面。生成的静态页面可以直接用常见的web服务器来serve(比如Apache和nginx等等)。
这东西有一个好处在于你可以用比较简单的语言Markdown来写作,而不是HTML,也不用关心HTML是怎么生成的,符合结构和渲染分离的原则(但是结构和渲染这东西总是相对的……)。而且还有一个好处是Jekyll和Git的关系非常紧密,你可以在Git repository里写作,正常commit/checkout,甚至可以上传到GitHub。GitHub Pages提供了对Jekyll的支持,上传之后会自动生成静态页面。关于GitHub Pages可以参考http://pages.github.com/
Jekyll的主页是https://github.com/mojombo/jekyll,大体上看完README就知道咋回事了。稍微比较重要的也就是这个目录结构https://github.com/mojombo/jekyll/wiki/usage。具体说就是:
- 在_config.yml里做总体设置;
- 在_layouts里设计模板,里面的{{ content }}部分将会被使用该模板的文本填充;
- 在_posts里用Markdown写文章,注意文件名的命名格式;
- 如果愿意,可以在_includes里设计模板的一部分,在其他文件中引用;
- 剩下的根目录里的其他文件,如果有YAML Front Matter这个东西,也会被Jekyll处理,否则就直接复制到目的地;
- 最后生成的结果在_site目录下。
其实说白了就是这么简单,你写个Markdown,Jekyll帮你搞成HTML。
貌似全程都没有数据库的参与,所以我还是觉得很神奇,如果有复杂的查询要求怎么办呢?看上去所有东西都要用Ruby程序搞定。当初写Blade的时候也在想是用纯文本还是数据库,后来为了查询简单就用了MySQL。如果纯文本在这方面也能做的很好的话那还真可以考虑抛弃数据库。不过我看_site下面生成的都是HTML,没有任何动态页面迹象或者索引之类的(好吧人家就是为了静态页面嘛……),那么在一堆完整的静态页面中做查询我觉得还是挺有挑战性的,相当于结构化的信息都被抹去了现在要反过来做,有点别扭。不过我看Octopress也有Search box呢,过会儿看看它是怎么做的吧。
Update. 朕惊了!跳到Google去了!
有时间的话还是想把Blade再升个级。其实现在这个版本也就算是个prototype,拖了很久没有重构了。写文章的方式还很蠢,很多HTML tags要手动加,没有辅助工具的用户估计很不爽。未来的计划大致包括:
- 支持Markdown;
- 尝试以静态化+索引的方式替代动态页面;
- 和Git整合。
- 用DISQUS管理评论。
具体说就是以Markdown作为书写语言,用Git进行版本控制(其实主要是为了方便查看过去特定时刻的状态,否则Git也不是太必要),支持静态化渲染和索引建立,方便进行关键字和日期等基本查找。评论的部分交给DISQUS估计能省去很多劳力(尤其是对一个静态化的站点来说)。最终的目标是,用户只需要写Markdown而不必管其他任何事情(当然如果他们愿意也可以自己写模板)。这工程不算太大但其实也不小,不过想想能把PHP+MySQL这一坨毛都移掉,用一种轻量化的方式来写blog,还是非常值得做的。万能的上帝请给俺发工资让俺搞定这件事儿吧!



