Nothing Ever Happened

很想说,却又没有什么话好说

Octopressed

刚用了大概俩小时把blog从wordpress迁移到了octopress。从此再也不依赖dreamhost这个杀千刀的主机供应商。

octopress是一个用Jekyll来生成静态页面的部落格系统。好处多多,列举若干如下:

  • 不需要用一套完整的LAMP就可以用:再也不用配数据库了。
  • 可以搭在heroku或者github上面。这真是要多爽有多爽。二者都有免费帐户,支持custom domain name,支持git。heroku上还有若干好用的addons,虽然大多都收费,但是其免费版本对于部落格来说绰绰有余了。
  • HTML5, mobile friendly。随机送一套很好的主题,当然我还是给改成原来部落格那样的了。
  • 自己折腾起来非常方便。装个POW, 本地调试几乎是labor free的(不过还是要自己rake generate…我基本上是用rake preview+rake watch来调试)。对我来说,折腾这个比折腾wordpress不知道方便了多少。

当然,事情都有两面。不好的地方呢:

  • 必须得会点编程。最最起码,哪怕你有个计算机系的凯子,也得自己git push,所以不是girl friendly。
  • 得用markdown,相信大部分少女是不会来学习这堪称史上最简单的格式化语言的。

你们这些女人,不动脑筋,不爱学习,迟早会被社会抛弃,过两年只能在家生孩子。 – K. Yang

正如作者所说,这玩意儿是a blog framework for hackers。对hacker们的福音是,你装octopress以后,要是有人来让你帮忙搞wordpress,你就说”wordpress?不会,没用过”。要是她非要你也给她装个octopress,你就说“会markdown么?会git么?不会?不会装个屁octopress。”。最后条条大路都给她们指向新浪博客。你看,省多少事情。

废话不多说,简单说说咋从wordpress迁移过来。以下是基于heroku的,github也可以,请自己琢磨。 客户端操作部分是*nix的,win用户请继续用新浪博客。

heroku

  1. http://heroku.com申请一个免费帐户
  2. 按照这里一步步来: http://devcenter.heroku.com/articles/quickstart, 到第二步就可以了。
  3. 可以把自己的域名指过来,要装custom_domains:basic。这一步需要验证信用卡。不用自己的域名也行,但起码改个正常的好记的。关于custom domain详细请见这里

octopress

  1. 按照这里一步步来: http://octopress.org/docs/setup/,到最后一步就可以了。

wordpress->octopress

  1. 到你的wordpress admin界面,export一下。请看这里
  2. 下载下面这个脚本(从网上看到的一个脚本改的,原来那个不支持中文而且太老,不支持octopress 2.0),Jekyll本身是有一个converter的,不过太复杂了。还是这种傻瓜式的比较好用。
    converter.rb (convert.rb) download
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
    require 'fileutils'
    require 'date'
    require 'yaml'
    require 'rexml/document'
    require "stringex"
    include REXML
    
    
    doc = Document.new File.new(ARGV[0])
    
    FileUtils.mkdir_p "posts"
    
    doc.elements.each("rss/channel/item[wp:status = 'publish' and wp:post_type = 'post']") do |e|
      post = e.elements
      slug = post['title'].text.to_url
      date = DateTime.parse(post['wp:post_date'].text)
      name = "%02d-%02d-%02d-%s.markdown" % [date.year, date.month, date.day, slug]
    
      content = post['content:encoded'].text
    
      content = content.gsub(/<code>(.?)<\/code>/, '\1')
    
      content = content.gsub(/<pre lang="(["])">(.?)<\/pre>/m<span class=”p”>, '')
    
      (1..3).each do |i|
        content = content.gsub(/<h#{i}>([<]*)<\/h<span class=”si”>#{i}>/, ('#'i) + ' \1')
      end
    
      puts "Converting: #{name}"
    
      data = {
        'layout' => 'post',
        'title' => post['title'].text,
        'excerpt' => post['excerpt:encoded'].text,
        'wordpress_id' => post['wp:post_id'].text,
        'wordpress_url' => post['guid'].text
        }.delete_if { |k,v| v.nil? || v == ''}.to_yaml
    
        File.open("posts/#{name}", "w") do |f|
          f.puts data
          f.puts "—"
          f.puts content
        end
    
      end
    
  3. 到convert.rb所在目录
1
2
$ ruby convert.rb <wordpress export file> 
$ cp _posts/* <octopress home>/source/_posts/

好了,现在就可以开始闯作了。至于怎么搞评论啊,RSS啊,请自己琢磨。再次推荐heroku,小气且懒惰的程序员的福音。