Migrating from WordPress to Octopress With Trouble Solution Painlessly

O.S.: 欠超久的wordpress轉到octopress的筆記文章…從2013/1/1正式轉戰octopress一直欠到現在T_T

要說為什麼從wordpress轉戰octopress麻,大概幾個原因點:

  • wordpress玩膩了,而且過於方便,沒有hacker的感覺
  • wordpress容易安裝套件導致網站速度變慢
  • octopress是由script產生靜態網頁,鐵定在速度上的使用者體驗很好
  • 繼續跟ruby保持一定的聯繫
  • 學習撰寫markdown
  • 省去hosting blog的麻煩與花費
  • 嘗試新事物

這篇文章將著重在如何無痛的將wordpress轉至octopress,至於ruby, octopress, git等等的安裝說明,網路上很多教學文章,就不詳加贅述,或可參考此篇文章:Hello Octopress!

Mirgration有幾個必要check的項目

  • Post(若使用外國開發者寫的script需注意中文編碼問題)
  • Page(同Post)
  • Comments(若使用Disqus便沒問題)
  • File/Images(下文會講解Octopress URI組成,便可無痛解決)
  • Code Format(這需端看讀者們用的wordpress程式碼上色plugin來對下方的convertor script做對應修改)

Post和Page轉換##

根據Xdite所寫的轉換script,自己改了一支convertor

與script相關需注意的wordpress設定如下,讀者下載convertor後記得在對應部分做修改

記得先去wordpress輸出部落格內容xml檔,convertor執行方式即將rb檔放在octopress/source/內,在terminal輸入


ruby woconvertor.rb [your xml file location]

即可將wordpress文章轉成一個個的markdown檔,及把Page做成一個個Octopress的Page格式資料夾

File/Images##

在Wordpress中File/Images都是放在wp-content/uploads這個資料夾內,再根據上傳的年、月為資料夾做區分,像是"http://blog.hothero.org/wp-content/uploads/2012/04/xxxxx.png"這樣的URL

Octopress的主要架構便是有plugins, sass, source, public四個資料夾,其中plugins與sass在這先跳過。public即是放所有產生出來的靜態網頁,public即是根目錄( / )。而public產生的來源便是source內的檔案,在source內除了_底線開頭名稱的資料夾會由script做為其他用途的輸出產生外,其他沒有底線開頭名稱的資料夾則會直接保留原始組成架構至public內(除非是markdown的文件,像是Page形式的資料夾)。

像source/images/code_bg.png再經過rake generate後便會成public/images/code_bg.png,公開連結即為http://yoursiteurl/images/code_bg.png。

因此,既然我知道在wordpress所上傳的檔案跟圖片都放在wp-content內,那就很好辦了。直接把wordpress內wp-content這個資料夾原封不動的複製到我octopress的source/內(source/wp-content/...),便無痛完成這些圖片、檔案的連結問題。

Comments##

因本來在wordpress就是用DISQUS在管理,所以沒這問題。若沒使用的人,可以下載DISQUS的plugin即可將站上的comment都倒進DISQUS內。

RSS Feed##

可以用FeedBurner做管理

ZSH Problem##

用ZSH的人可能會遇到"rake new_post["whatever"]"時出錯"zsh: no matches found"。只要將下面指令加到zshrc內即可


alias rake='noglob rake'

SEO##

可參考此篇文章:Octopress中的SEO,這裡就不再贅述。

中文名稱分類的URL Encoding##

根據此篇文章:Octopress博客分類添加中文支持所提,將plugins/category_generator.rb內約105行左右的write_category_indexes函數,改為:


def write_category_indexes
  if self.layouts.key? 'category_index'
    dir = self.config['category_dir'] || 'categories'
    self.categories.keys.each do |category|
      cate_dir =  category.gsub(/_|\P{Word}/, '-').gsub(/-{2,}/, '-').downcase
      cate_dir = URI::escape(cate_dir)
      cate_dir = URI::parse(cate_dir)
      cate_dir = cate_dir.to_s
      self.write_category_index(File.join(dir, cate_dir), category)
    end

    # Throw an exception if the layout couldn't be found.
  else
    throw "No 'category_index' layout found."
  end
end

RSS Feed中文編碼##

1. 到Ruby安裝目錄下(可透過which ruby,找到執行檔在哪)####

例如which ruby得到/Users/hothero/.rvm/rubies/ruby-1.9.3-p374/bin/ruby,那安裝目錄即為/Users/hothero/.rvm/rubies/ruby-1.9.3-p374

2. lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll, 即cd ~/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/jekyll-0.12.0/lib/jekyll

3. 找到convertible.rb這個檔案####

4. 修改####


self.content = File.read(File.join(base, name))

為####


self.content = File.read(File.join(base, name), :encoding => “utf-8”)

以上,祝大家都能順利轉移。

Reference