乐者为王

Do one thing, and do it well.

Wordpress迁移到Octopress

GitHub Pages提供免费的静态站点托管服务,有两种类型:User/Organization Pages和Project Pages。前者是用户/组织的主页,一个用户/组织仅有一个;后者是每个项目的主页。

安装Octopress时,rake setup_github_pages会要求输入GitHub Pages项目的URL,根据URL判断是哪种服务。如果是前者,会在新建的_deploy目录上创建master分支,用于存放发布的静态文件,并把原master分支改为source分支;后者则仅在_deploy目录上创建gh-pages分支。

Octopress默认的permalink是/blog/:year/:month/:day/:title/,想把它改成/:title/这种格式。修改后,发现生成的文章都跑到了public目录下,默认应该是在public/blog目录里的。为保持目录的简洁,把它改成了/blog/:title/,这样虽然生成的文章没有按年月日分目录,但是用户在访问系列文章时就可以只修改相应数字,不然必须得记住几乎不可能知道的文章的发布年月日。

至于评论的迁移,不想费过多的手脚,直接使用Octopress自带的Disqus。在Wordpress中安装好Disqus插件,通过插件设置将现有的评论内容导入Disqus。不过Disqus处理导入数据的时间有点长,需要等待一段时间,可以在 http://import.disqus.com 查看导入进度。导入完成后,把Wordpress文章的permalink改成和Octopress相同,登录Disqus后台,找到Migrate Threads栏目,在Domain Migration Wizard里把旧域名改成新域名,然后一路Next就大功告成了。

不过在实践中碰到了问题,打开某篇有评论的文章,发现只有评论框,没有评论。搞不明白是怎么回事。后来受到 http://www.ducea.com/2012/11/12/disqus-comments-not-visible-in-octopress/ 的启发,原来是_config.yml中的URL还是生成项目时的,与CNAME中配置的域名不一致,修改后就没问题了。

在侧边栏显示最新评论也很简单,添加recent_comments.html到source/_includes/custom/asides目录下,在_config.yml的default_asides做好配置,最新评论内容就会出现在侧边栏中了:

1
2
3
4
5
6
<section>
  <h1>Recent Comments</h1>
  <div class="dsq-widget">
    <script type="text/javascript" src="http://codemany.disqus.com/recent_comments_widget.js"></script>
  </div>
</section>

在侧边栏显示Tag Cloud参照了 http://codemacro.com/2012/07/18/add-tag-to-octopress/ 教程,没几分钟就搞定了。

分享使用的是JiaThis,只要把source/_includes/post/sharing.html中的代码替换成以下代码就可以:

1
2
3
4
5
6
7
8
9
10
<div id="jiathis_style_32x32">
  <a class="jiathis_button_qzone"></a>
  <a class="jiathis_button_tsina"></a>
  <a class="jiathis_button_tqq"></a>
  <a class="jiathis_button_weixin"></a>
  <a class="jiathis_button_renren"></a>
  <a href="http://www.jiathis.com/share/" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank"></a>
  <a class="jiathis_counter_style"></a>
</div>
<script type="text/javascript" src="http://v2.jiathis.com/code/jia.js" charset="utf-8"></script>

相关文章本想用Octopress自带的lsi模块实现,只是当文章较多时生成速度实在是巨慢,按照推荐安装gsl模块,结果在Windows Server 2008系统上死活装不上,采用手动编译方式也总是死在rb-gsl的安装上。失望之余找到 https://github.com/LawrenceWoodman/related_posts-jekyll_plugin 这个插件,它使用起来非常简单,只需将related_posts.rb放到自己的plugins文件夹中,然后在source/includes/post中新建relatedposts.html文件:

1
2
3
4
5
6
7
8
9
10
{ % if site.related_posts % }
  <h3>Related posts</h3>
  <ul class="posts">
  { % for post in site.related_posts limit:3 % }
    <li class="related">
      <a href=""></a>
    </li>
  { % endfor % }
  </ul>
{ % endif % }

修改source/_layouts/post.html,在

1
2
3
{ % include post/author.html % }
{ % include post/date.html % }{ % if updated % }{ % else % }{ % endif % }
{ % include post/categories.html % }

后面添加

1
{ % include post/related_posts.html % }

就可以了。使用这个插件会有个小问题,就是它和Jekyll 2.1不兼容,rake generate时会报错,可以使用jumanji27提供的fork版本

在Wordpress的Tools/Export页面选择导出文章内容,保存为wordpress.xml文件。然后使用工具把它转换成markdown格式。这里使用了YORKXIN的修改版本,将脚本和wordpress.xml放到Octopress根目录下,然后运行:

1
ruby -r ./wordpressdotcom.rb -e Jekyll::WordpressDotCom.process

会把转换好的文章都放到source/_posts目录下,文件后缀名是html,直接改成markdown就是。

最后就是苦力活:修改文中的站内链接、上传的图片路径以及代码高亮语法等。

Comments