Random Tech Thoughts

The title above is not random

博客转用 Octopress

很早就想用 Vim + Markdown 写博客,甚至有想过自己写一个,不过我在 HTML 上的三脚猫功夫让我打消了这个念头。最近听 Zellux 说 Octopress 可以实现这一点并且亲身实践,所以决定也转用 Octopress 了。

Octopress 的好处和如何从 wordpress 迁移数据可以参考 Zellux 的文章,我用了他的脚本,按照我的需求做了一点修改,代码在此。 Octopress 的文档还不错,这里记录下我迁移数据和 deploy 时遇到的一些问题。

  • 如果打算用 rsync 来发布的话路径一定要配置正确。由于发布时 rsync 名来带了 --delete 参数,所以如果服务器上的目录下有其他内容会被全部删除。Rakefile 里的 document_root指定 rsync 时服务器上的路径,它跟 _config.yml 里的 root 没有什么联系。(我自己悲剧了……)

  • 维持原先 wordpress permalink 的形式。从 wordpress 导出评论到 disqus 之后是使用 permalink 来找对应的评论的,如果改动的话评论就无法在原来的文章下出现了。

  • 带中文的 URL permalink 的带来的麻烦。

    • migrate 文件把每篇文章转为一个 markdown 文件,且以 wordpress 导出的文件里 post\_name 作文件名。post_name 是 URL encode 过的,因此中文会变成 %xx 的形式,但在 generate 整个 site 的时候会对文件名再次进行 URL encode,所以原来的 %xx 会变成 %25xx,这会导致 disqus 无法找到评论。

      解决办法是在 migrate 的时候对 post_name URL decode 一下,这样中文文章的名字也会好看很多。

    • disqus 无法找到中文文章的评论。

      jekyll 在生成的页面中设置 disqus_url 变量来获取对应文章的评论,这个变量使用了 page.url,其中 URL encode 过的字符是大写英文字符,但在 wordpress 导出到 disqus 里的 permalink 是小写的,大写小不匹配导致找不到对应的评论。(URL 中除了 path部分大小写可能有意义,所以 disqus 不能忽略大小写。)

      解决办法是创建一个 Liquid filter 来把 page.url 里的 ‘%XX’ 转成 ‘%xx’,我所做的修改也放在 gist 上

  • 图片和其他附件的处理。把服务器上 wp-content/uploads 拷贝到 octopress/source/uploads,用 sed 批量改下文章里的 url,改成相对路径。

后记

整个过程最麻烦的地方就在于中文 URL permalink 的处理上了,其他都还好。

希望换成 Octopress 之后可以更勤快的更新,一些用 markdown 做的笔记也许也可以整理一下然后发布出来。

回头看看自己刚开始写的日志觉得当时真是二啊……如果当时有 Twitter 的话很多文章都没必要发了。不过就这么留着吧,有些事情不是这个博客记录着都差点忘了,回过头来也能看到自己成长的过程。

Comments