原因
前一陣子在 DreamHost 上的 WordPress 被破台……要不是誤打誤撞在 Google 搜尋的時候發現被標上危險網頁,可能還被矇在鼓裡,所以決定轉換部落格系統到直接產生靜態網頁的系統。
當然除了被破台外,XDite 在這篇提到的一些原因也是我遇到的問題,從以前就比較喜歡在 VIM 裡寫完了文章再貼到 WordPress 去,可是這樣真的很麻煩,而且用久了之後,會發現 WordPress 的排版功能真的是一團亂,到最後實在是很痛苦。
雖然目前看起來比較火紅的是 OctoPress 這套,但最後我還是決定轉換到 Pelican,原因是他同時支援我原本在 WordPress 上用的 Markdown,也支援功能比較多,表現也不錯的 ReStructuredText。
轉換文章
轉換的過程比較麻煩的是把 WordPress 的文章轉出來,因為我之前轉過好幾次部落格的寫作方式(自製的用 PHP 寫的靜態網頁產生器到一般的 WordPress、再到加了 Markdown 的 WordPress),再加上又用了 WordPress 的 PicasaWeb 相簿外掛 Shashin,所以文章的格式非常混亂……
為了解決這個問題,最後的做法是把原本 WordPress 的文章匯出成 XML,再從 WordPress 的資料庫中把 Shashin 的資料表倒出,最後再自己寫一支小程式將 XML 轉成分別的 Markdown。
聽起來似乎很麻煩,不過感謝方便的 Scala,最後只花了 106 行就解決了。 :p
轉換留言
要轉換留言滿簡單的,先在 WordPress 安裝 DISQUS 的外掛,然後將原本的留言匯出到 DISQUS 就可以了,再加上我轉換文章的時候,本來就把文章的短網址設成 WordPress 的文章 ID,所以只有修微改一下佈景主題,讓舊文章分類內的 DISQUS ID 帶的是 WordPress 的文章 ID 這樣。
<div id="disqus_thread"></div>
<script type="text/javascript">
{% if category == "舊的回憶" %}
var disqus_url = "http://brianhsu.moe/blog/archives/{{ article.slug }}";
var disqus_identifier = "{{ article.slug }} http://brianhsu.moe/blog/?p={{ article.slug }}";
{% else %}
var disqus_identifier = "{{ article.url }}";
{% endif %}
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://{{ DISQUS_SITENAME }}.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
轉換網址
因為我本來在 WordPress 裡用的就是以文章 ID 為網址的方式,然後再轉出時也把文章的網址設成 WordPress 的文章 ID,所以只要用 ReWrite Rule 把舊的網址轉換成新的網址就行了。
RedirectMatch permanent /blog/archives/(\d+) http://brianhsu.moe/blog/$1.html
RedirectMatch permanent /blog/feed/rss http://brianhsu.moe/blog/feeds/all.rss.xml
RedirectMatch permanent /blog/feed/atom http://brianhsu.moe/blog/feeds/all.atom.xml
RedirectMatch permanent /blog/feed/?$ http://brianhsu.moe/blog/feeds/all.atom.xml
發佈上傳
因為 DreamHost 有提供 SSH 的功能,所以可以直接使用 RSYNC 上傳,再寫一個簡單的 Makefile 來幫忙簡化工作,這樣整個寫作流程就很順暢了。 :)
RSYNC_TARGET = XXXX@XXXX.XXXX:~/public_html/blog
.PHONY: clean
blog: source
pelican -v -s conf.py source
rsync: blog
rsync -e ssh -auv blog/ $(RSYNC_TARGET)
clean:
rm -rvf blog/
all: rsync
還沒解決的
剩下還沒解決的有……
- 發文章的時候同步到噗浪
- 原本的每週自言自語,不過有了噗浪官方備份後,這個功能應該不需要了?!
回響