告別wordpress,擁抱jekyll
jekyll是近些年來比較流行的輕量級博客系統(tǒng),它也是一個強大的靜態(tài)網(wǎng)站生成系統(tǒng)。本文簡要介紹了從wordpress遷移到jekyll的一些注意事項。
主要特點
- 直接使用Markdown文件作為默認模版語言。
- 支持通過git跟蹤所有內(nèi)容。
- 有大量的知名程序員在使用,并且有大量的模版。
- 支持自動生成靜態(tài)網(wǎng)站。
安裝
很簡單,
gem install jekyll
如果不需要用默認的模版Maruku,想使用RDiscount,則請安裝:
gem install RDiscount
更多細節(jié)可以參考官網(wǎng)
有好事者做了一個比較,Maruku是純ruby的Markdown模版解釋器;RDiscount則是c寫的模版解釋器,兩者的效率顯然不同:
* BlueCloth: 13.029987s total time, 00.130300s average
* Maruku: 08.424132s total time, 00.084241s average
* RDiscount: 00.082019s total time, 00.000820s average
使用
安裝完jekyll的gem之后,然后運行它,生成一個自己的網(wǎng)站。然后進入自己的jekyll目錄,首先配置以下_config.yml文件,指定未來生成的網(wǎng)站的路徑以及其他參數(shù)。然后運行:
jekyll --server
關(guān)于jekyll的用法與配置官方解釋很詳細,請自行閱讀。
用習慣jekyll的人會覺得很舒服,它一貫地繼承了Mac下的軟件的特點:簡潔;漂亮,同時還很有rails約定大于配置的精神,通過目錄等默認文件即可構(gòu)成一個強大的網(wǎng)站系統(tǒng)。
如果默認模版是使用rdiscount,則請修改_config.yml文件:
markdown: rdiscount
導入wordpress數(shù)據(jù)
導入其他博客系統(tǒng)的文章,可以參考官網(wǎng)。導入wordpress的主要步驟如下:
- 找到jekyll gem庫下的migrate文件夾下面的文件wordpress。rb,具體路徑可以通過 gem environment命令找到你當前所在的gemset環(huán)境之下。也可以按照官方教程,安裝一個open_gem的插件。
- 在自己的jekyll實例站點,新建一個_import目錄,將wordpress.rb文件復制到此。
安裝兩個讀取mysql數(shù)據(jù)庫的插件,
gem install sequel mysqlplus
默認的文件不支持utf8,請修改:
#修改之前:db = Sequel.mysql(dbname, :user => user, :password => pass, :host => host)
db = Sequel.mysql(dbname, :user => user, :password => pass, :host => host, :encoding => 'utf8') #修改之后
然后在Shell進入_import目錄中,運行以下命令,請將相應的路徑,wordpress的數(shù)據(jù)庫的名字,連接數(shù)據(jù)庫的用戶名與密碼修改為自己對應的。
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export DB=xingfukenet #請修改為自己的wordpress數(shù)據(jù)庫名字
export USER=root #請修改為自己的wordpress數(shù)據(jù)庫用戶名
export PASS= #請修改為自己的wordpress數(shù)據(jù)庫密碼
ruby -r 'wordpress.rb' -e 'Jekyll::WordPress.process( "#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")'
如果需要對導入的細節(jié)進行定制,可以修改wordpressrb.rb文件中的語句,比如,只導入某個作者的文章:
QUERY = "select post_title, post_name, post_date, post_content, post_excerpt, ID, guid from wp_posts where post_status = 'publish' and post_type = 'post' and post_author=12"
YAML格式的問題
YAML格式默認是:參數(shù)+:+空格,如果忘記寫空格描繪編譯報錯。jekyll用的最頻繁的幾個參數(shù)如下所示,更多參數(shù)可參考官網(wǎng)wiki。
title: 如何學習ruby and rails雜談
excerpt: 如果希望享受編程的樂趣,ruby與rails或許是比c#與asp.net等更好的選擇。
layout: tech-post
請注意冒號之后的空格。如果少了空格,編譯通不過。另外,請注意ruby的to_yaml函數(shù)默認會使用ruby內(nèi)置的對中文字符處理方式,會將string輸出為
title: !binary |
44CQ5bm456aP6K++44CR5oiR5Lus55yf55qE6ZyA6KaB44CK572R57uc5oiQ
55i+6K+K5pat5qCH5YeG44CL5ZCX77yf
這種格式。這是由于ruby默認的yaml庫對utf8的支持導致的。我們需要對其做處理。一種辦法是調(diào)用require 'yaml/encoding',而更安全的辦法則是:require 'ya2yaml',修改之后的wordpress.rb如下所示:
$KCODE = 'UTF8' unless RUBY_VERSION >= '1.9'
require 'rubygems'
require 'sequel'
require 'fileutils'
require 'yaml'
require 'ya2yaml'
。。。
。。。
# Get the relevant fields as a hash, delete empty fields and convert
# to YAML for the header
data=
{
'layout' => 'psy-post',
'title' => title,
'excerpt' => post[:post_excerpt],
'wordpress_id' => post[:ID],
'wordpress_url' => post[:guid]
}.delete_if { |k,v| v.nil? || v == ''}.ya2yaml(:syck_compatible => true)
。。。
。。。
如果需要對原來的wordpress的html代碼進行過濾,可以如此處理:
require 'rubygems'
require 'hpricot'
require 'hpricot_scrub'
...
content = post[:post_content].scrub(:allow_tags => ['table', 'tbody','tr','td','div','a','blockquote','img'])
#table,tbody等標簽保留下來。
...
導入到github pages
首先在本地測試通過,注意目前github pages使用的jekyll為:0.7.0, 運行:
jekyll --pygments --safe --server
然后在自己的github庫中創(chuàng)建一個username.github.com的庫。
將自己的jekyll實例復制到本地的該庫中,然后推送即可。
git remote add username ...
git push username
推送成功之后,可以使用http://username.github.com/瀏覽自己的個人網(wǎng)站。如果希望自定義域名,也很簡單,創(chuàng)建一個CNAME文件,內(nèi)容為你的域名即可。
更多說明,可以參考:
http://pages.github.com/
享受云計算時代的快樂
在一切都向云計算邁步的今天,jekyll本身是不帶評論系統(tǒng)的,一般是使用disqus的云評論服務。安裝很簡單,去官網(wǎng)自行注冊一個免費賬號,然后按照提示,一步一步往下走就可以了。到了需要導入評論的時候,則請參照disqus的開放api與相關(guān)工具。這樣以后,你的個人博客的評論隨身攜帶,不用擔心隨著博客系統(tǒng)遷移而丟失。
不僅是評論可以在云中,寫作的所有進程也可以托管在云中。與wordpress的版本跟蹤相比較,必須使用wordpress后臺來寫的時候才能版本跟蹤,你可以將自己的jekyll實例托管到github上去。如果對github不熟悉,或許有必要了解一下關(guān)于git的基礎(chǔ)知識。熟悉的朋友則很好辦了,直接進入jekyll實例目錄,然后分別執(zhí)行g(shù)it的常規(guī)操作,就可以擁有一份由github保管的備份??梢苑浅T敿毜赜涗浤阋磺袑懽鞯倪M程,而不用擔心版本丟失。由于git的強大,使得你能將在任何離線環(huán)境之下,對自己的文章、代碼等進行的操作,都可以在聯(lián)機之后,推送到服務器上。jekyll與git以及Markdown的先天結(jié)合,可以隨時隨地進行版本跟蹤,也許這點是極客們?nèi)找嫦矚g它最重要的原因。
|