{Blog 系統轉移} b2evolution migrate to wordpress import script.

從某一個應用系統 (或資料庫系統)要把資料轉移到另一個應用系統 (或資料庫系統),這個轉移的過程稱之為 “Migration” (相對地,若是同一系統的版本更新,則稱之為 Upgrade)。

上一個月,要從原來 b2evolution Blog 系統轉移 (migrate)到 wordpress 系統時,就如同當初我從 MT 轉移到 b2evolution 一樣,官方的系統均有提供 import (載入) 的 script 檔。 只是, MT 轉 b2evolution 時,當時因為資料結構比較單純,所以完全不用作任何修正,透過 import 工具程式一下子就轉好了;但是,這兩三年來, b2evolution 系統相當積極,版本更新極快,而每一次大版本的更新,必然會變動到 DB Schema,這使得 wordpress 所提供可以 import from b2evolution 的 script 檔,不可能不作修改就可以順利完成轉移作業。

wordpress 官方所提供對各大 Blog 系統的 import script 檔在此:Importing Content。 不過,我真的挺懶,想說若能找到無痛地可以從我現在 b2 1.10.3 版本 → wordpress 2.71 的網友加持修改版,那就更省事了。 結果呢,花了大半天的時間,是有找到啦,像這篇: Import From B2evolution(2.4.6) to WordPress (2.7)。 只是,要收費耶!! 含售後客服要價 50 USD。 其實啊,這價錢是算便宜的啦,當初我擔任某家公司的 Oracle DBA 時,幫企業客戶作轉檔的話,起碼是 10 數倍以上收費起跳的呢。

不過,想想還是乾脆又自己來動手 DIY 好了。 其實轉檔的原理相當簡單,就是把 Source Schema 對應 (mapping) 到 Target Schema 就對了。 b2evolution 有 31 個表格;wordpress 則只有 10 個 (非常欣賞它的結構簡潔)! 怎麼會差這麼多? 主因就是前者是被設計來服務多個部落格用戶的,而後者僅設定單一的部落格,所以前者儲存了非常多的統計數據,而這些,其實是不用轉移的。

轉移的核心會是什麼? 當然就是本文內容了。 本文就是包含 Post 內文 (content)與迴響 (comment),一篇內文會包含 0 到 多篇迴響,非常典型的 “Master-Detail” 表格結構,一般就是會有兩個表格個別儲存並以 Key (primary-key to foreign key)來關聯了。 所以只要找出含有 “_post” 字串的表格,大部份就是儲存 Post 內文的主表了。 再以此為中心,把一些如類別 (category)、帳號等額外資訊,給一一的加進來即可。

轉檔的寫法百百種,可以利用 stored-procedure、利用 C#/VB.NET、PHP、Perl 等機制來轉寫轉檔程序。 事實上,對資料結構與 SQL 語法精通的真正高手來說,只要寫個 SQL 陳述 (statement)甚至就可以轉移了。 嗯,我那個 partner Ringle 就是精通此道,他對資料庫的掌握度,我仍是沒有看到一個比他更強悍的。 可惜,他可不幫我作這種小事,而他收費可更是不便宜。 所以呢,我還是又繞回來,下載回來 wordpress 官方的 import script 程式,當然是利用 php 撰寫的,再以此作為轉移程式的 “骨架 (skeleton)”,然後慢慢地調整 SQL 陳述,修改表格與欄位、資料型態等。 呵呵,比想像得簡單,我採用漸進調整的方式作業,大概反覆轉移了有四、五次之多,至最終轉到我滿意正確的結果,大約也才耗上半天的時間而已。

閱讀全文 »

WordPress 新系統上線 (from b2evolution migrate-to wordpress)

整整花了有一個月的時間在新系統的建置上!

因為原來所使用的 b2evolution 系統,在去年七月升級失敗後,且越來越有感於 b2evolution 的越來越難以維護。或者說,一開始就是被開發設計用來適用於多人部落格的該系統並不太適合我,再則越來越傾向選擇自由度較高、較簡潔、有眾多 plugin 外掛支援的 wordpress 系統。 於是今年過年後 (原來是打算過年期間動工的,但出外旅遊貪玩而延宕),約二月底開始著手系統移轉的作業。

原來天真的以為,大約一個星期、最晚不會超過兩個星期的移轉工作,沒想到整整拖延了一個月有餘,可以說是陷入泥沼,太多的細節要調整了,包括舊系統 (b2evolution)的資料移轉 (migration)、新系統的建置等。 尤以後者,花在佈景 (theme) 的 CSS 設計,根本就是從無到有、一點一滴全部自己來動手架成的,主因是看了上百個佈景樣式,竟然沒有一個滿意的,沒有我預想的 layout 與 style;再則我思考過,轉移到 wordpress 系統後,原則上我希望就沿著該系統的版本一直更新即可,希望能用上 10 年之久! 所以乾脆花個時間來學 CSS 設計,以方便爾後自由地更改 style 與 layout。

整個移轉的過程,從 b2evolution 的系統,改寫 migrate.php 至 wordpress 新系統、CSS 設計、wordpress 系統建置設定等工作,完全沒有問過任何一個人、發問過任何一個問題,全部都是透過 google 查詢。經常是為了一個小小的設定問題,瀏覽了國內外數十頁網站淂來的。 這也算是印證,幾乎這些 How-to 的設定問題,都是可以透過 google 找得到答案的 (只是還挺辛苦的)。

許許多多關於上述如移轉問題、系統架設與建置設定、CSS 的一些竅門 …等,趁著我還有記憶時,近日內也會逐漸地發表安裝設定備忘錄。 對了,原來其它網站有貼了我舊系統的文章鍊結 (permalink),也不用調整更改,仍然是可以連結得上的。 這也算是我頗值得欣慰的地方。

目前完成的進度約有十之八九吧,還有一些小細節等需要調整。當然,也應該會有一些 Bug 或介面操作等問題,這些可能就麻煩有瀏覽我網站的讀者們多多包涵、也希望能留言或來信給予建議指教了。

※ 舊系統 b2evolution 的 screenshot。
http://www.flickr.com/photos/kenming_wang/tags/b2evolution/

認真考慮改架設 WordPress Blog 系統

自從上次升級 b2Evolution 失敗後,請參考:【系統升級】b2evolution 失敗的升級 (from 1.10.3 to 2.4.2)。 到目前為止,官方最新版本為 2.4.5(2008/11/19),與我現在所使用的版本已差上一個大版,又感現在執行升級等程序已越來越困難,原因在於我個人似乎 “Hack” 了許多的功能設定,老實說,若沒有自己動手 DIY “Hack”,可以參考其它利用 b2Evolution 架設的 Blog 平台,看起來好像就是那個樣子,似乎單調了些。

早在很早以前,從 MT 系統要改為當時更為開放的 php-based 的 Blog 平台,其實就是拿 b2evolution and wordpress 來比較。 後來選擇 b2evolution 的原因就在於那個時候的版本已經有支援 UTF-8,而 wordpress 則否。 為了中文編碼的問題,我才選擇了國內甚少人使用的 b2evolution。

前幾天與那個可愛漂亮的花小妹聊天,她蠻推崇 WordPress 平台的,又介紹說最近出了一本:「 WordPress部落格架設與經營:站長親授的十堂課」,她還註文推薦呢,所以我也從網路書局訂購了一本來瞧瞧(還沒寄來)。 看來 WordPress 國內挺多用戶使用它的,各類功能的 plugin 模組聽說有上千種之多呢,這使得我現在真的認真考慮要轉移 Blog 平台了。

最大的兩個問題,一為我的文章有很多參考自己其它文章的超鏈結,整個要改掉;另一個就是似乎有許多其他的網站,也有參考我許多文章的鏈結,這些就都一定會失效了。 至於資料的轉檔問題,因為蠻久以前,在我擔任 Oracle DBA 的時期,做的事情也有包括到轉檔的工作,我想應該還不至於陌生的。

第一個問題很傷腦筋,好像沒有一個明確的規則,很可能要一篇一篇的過濾,手動來編輯鏈結的變更。只是喔,我的文章累積起來可能也快有 2000 篇了,這種 “粗重” 一篇一篇改的笨功夫,不知道要花上多少時間? (若是花上個兩、三天,我是還可以接受的啦。)

第二個問題呢,就不知道影響會有多廣了? 我也無法推測! 這其中也必然會牽連到包括 Google 等搜索引擎的查詢。

是還有另外一個折衷的方法,就是原來我的 b2evolution 系統全部不動,也停止更新,然後架設一個新的 wordpress 平台,除了把舊的文章轉移(migrate)過去外,爾後新發表的文章就是在 wordpress 平台上了。 這個是衍生出兩個問題,一個就是新的平台最好是申請另一個新的網域(domain),例如, http://www.kenming.tw (我現在用的是 http://www.kenming.idv.tw/ ; 另一個問題就是,虛擬主機那邊還要多花錢來申請一個子網域,同時也要承擔到流量的負載問題。

那一種方法比較好? 我還在思考中,但是 Blog 平台的轉移,我是傾向要動工,而且是打算轉移到 wordpress 後,起碼有五年以上的時間,不會再考慮其它的平台的。

不過,嗯,這可真的是大功夫,包括上述的問題要克服外,架站還有 CSS Layout等都要重新設計的,這可要花上不少的時間呢。

若是要動工的話,應該就是利用春節的期間,窩在家裡專注地來作這些 “粗重” 的工作囉。

[b2evolution] 安裝 Code Highlight Plugin 模組

有時在 Blog 的內容內,會有含程式碼的範例,若要讓其能正常顯示,一般是設定 html 的〈pre〉標籤。 不過呢,想當然其 format 樣式是不會好看的,若希望能如在 程式碼 IDE 編輯器上所顯示的那般,不同的關鍵字、不同的程式語言,就能顯示不同的顏色。甚至呢,還可以顯示出行號來。

有兩種方法,可以讓網頁的程式碼片段(code snippets)內容,顯示出行號與關鍵字顏色等比較看起來像是真的在看程式碼的內容般。 一種是在 Client 端能解析網頁內程式碼的內容。 最具知名度的應該是這個吧: Syntax highlighter。它是 Javascript 的程式,是伴隨著網頁內容一同下載到 Browser 端,再由其編譯器來解析。 這種方法好處是很方便,不用更改到 server 端的設定,就是只要在網頁的 header 區貼上該段程式碼即可。 而主要的缺點就是要多下載約快 200k 的 javascript 程式,耗費傳輸頻寬,也稍微增加了 Browser 端的解析負擔,還有呢,也會與所使用的 Browser 各種版本所使用的 javascript 編譯器有關,使得解析出來的結果,在各種瀏覽器所看到顯示結果的會不太一樣。

另外一種方式就是在 server 端,也就是在 Blog 平台上,安裝 “code lightlight” 解析器的 plugin。 然後當 blog 文章要輸出時,整個網頁內容會在 server 端這邊作一個完整的解析。這個過程應該是稱之為 “Text Rendering”。 好處就是網頁內容在傳輸輸出前,就已經處理過,並轉為完整 HTML (XHTML) 格式的網頁。 但是缺點就是,必須在 server 端上設定安裝,而這與各個平台版本是否有支援這類的 plugin 機制是有關係的。

我傾向後者的方式,主要的原因是我的 Blog 內容,在每一個頁面(page),並不會常出現程式碼的片段內容; 再則,我總覺得從 server-side “空降” 一個 javascript 的解析器,有說不出的彆扭感,且每次傳輸要多上近 200K,實在覺得說不過去。

所以,決定後,我的方向就是轉向尋找 b2evolution 有無支援 “code hightlight” 的 plugin 模組。 原來官方版本就有提供一個預設的了,但是蠻陽春的,好像只支援 php 與 html 的程式碼顯示而已。 還好的一點是,在官方網站上有看到其中一位國外網友改寫了這個陽春的模組,將其解析的核心改為 GeSHI。 這太棒了! 這個 GeSHI 解析器(php-based),可以解析的程式語言可是高達上百種,而且還在持續的維護更版中。

這個網友改寫的模組在這裡: b2evolution code highlighter plugin modded to use GeSHi。 安裝超級容易,就是依照該網站的安裝提示,下載該網站所提供的 plugin 模組,以及最新版本的 GeSHI 程式,再一同解壓縮至 “blogroot/plugins/code_highlight_plugin/” 目錄即可,然後在 Blog 個管理平台啟動該模組就可以了。

閱讀全文 »

【系統升級】b2evolution 失敗的升級 (from 1.10.3 to 2.4.2)

昨晚約 10:00 左右,想說我的部落格系統已有約 10 個月時間沒升級了,再來則是 b2evolution 釋出最新的穩定版本 2.4.2,已經與我現在使用的版本差了一個大版的號碼,功能等應該有增進不少。 依著以往的經驗,升級的時間約兩個小時內應該可以完成的。

參考原先我寫的升級備忘錄: [系統升級] b2evolution from 1.10.2 to 1.10.3,與 【系統升級】b2evolution from 1.8.2 to 1.10-beta

沒想到,整個升級的過程相當不順利。 先是執行 phpmyadmin 所下載回來的資料庫 Dump SQL 檔,全都是亂碼。找了許久,才發現到連線校對系統給我的預設為 utf8-unicode-ci, 我沒看清楚,以為是正確的,結果應該是設定為 utf8-general-ci 才對。 然後,執行升級的程序(script)後,資料庫是可以順利升級沒錯,但是,部落格首頁(以及系統頁面的 Blog設定標籤)總是在最後面會出現錯誤訊息:

An unexpected error has occured!
If this error persits, please report it to the administrator.
Go back to home page
Additional information about this error:
Requested User does not exist!

從官方網站討論區找解答,仍是找不出所以然。 然後又想啟動 DEBUG 模式,結果呢,一啟動 DEBUG 本身也是 Bug,它會出現:

MySQL error!
Variable ‘sql_mode’ can’t be set to the value of ‘TRADITIONAL'(Errno=1231)
Your query:
SET sql_mode = “TRADITIONAL”

又再去查了資料,發現到應該是與 MySQL 版本(只有 v5 以上才支援上述的模式)有關,但是目前我使用的 v4 版本實在不知道如何設定...。

弄到凌晨兩點多,不想再弄了,想說倒回去還原好了。 結果呢,資料庫因為新舊版的 Schema 定義並不一樣,必須砍掉再從我原來的備份檔上傳載入(Import)。使用原來我一直用來很順利的 BigDump.php ,這次竟然不靈,在 Dump 備份檔的過程中,它一直顯示出問題,好像是某一些 INSERT 的資料行有太多的 LF RETURN 符號所致? 只好改用 phpmyadmin,但是又因為備份檔高達 27MB,結果導致 Import 上傳會 Time-out,弄得到後來我只好分批切幾個備份檔,再一一載入,才完成還原的工作。 至於 blog 檔案目錄,就很簡單了,把原先備份在 server 的目錄(已更名),再更名回來就可以了。 弄得灰頭土臉,到今日近 5:00 時才又恢復原來的系統,實在是耗費了一整夜的白工!

這一次最大的教訓就是,應該把原來的資料庫直接給複製到 Server 端另一個資料庫系統就好了,透過 Dump 檔執行還原工作,耗費時間且不是太保險(當然,無論如何還是要 export 備份出來)。 再來就是,應該先在我自己 Local 的 VM(Virtual Machine) 環境內,先預先作過完整的升級過程,待沒有問題的話,再至 Server 端執行升級作業,如此,才能確保升級的順暢,也不致影響部落格平台的運作。

[系統安全] 讓 b2evolution 的密碼保護更安全一些

我一直對 php-based 的密碼防護有蠻大的顧慮,將連線帳號密碼以明碼的方式寫入 php 設定檔中,感覺實在甚不安全。剛好在升級 xoops 系統時,爬文看到此篇:「把管理者帳號和密碼從Mainfile.php中移出來」 。想說應該同樣的方式也適用在 b2evolution 的系統下!

原理其實很簡單,b2 的帳號密碼是放在 \conf\_basic_config.php 中,不要把帳號密碼放在這裡,而是改成:

$db_config = array(
	'user'          => $db_user,     // your MySQL username
	'password'      => $db_passwd,     // ...and password
	'name'          => $db_name,  // the name of the database
	'host'          => 'localhost',    // MySQL Server (typically 'localhost')
);

而帳號密碼抽離出來,另存成一個檔案,就名為 b2evolution-auth.php ,放在 securedata 目錄下 (目錄與檔案名稱均可自訂) :

$db_user   = "username";   //database username here 
$db_passwd = "password";  //database password here 
$db_name   = "b2evolution";    //your database name here 

而在原來的 _basic_config.php 內容中,在第一行加入如下:

include ("/home/hsdctw/securedata/b2evolution-auth.php");

該檔案存放的位置就是重點了。可不是存在 b2evolution 的子目錄下,而是應該儲存在你的 home 目錄,或者是在虛擬主機給你的根目錄下。例如以我的為例,就是放在 /home/securedata 下。如此除非 Hacker 有登入虛擬主機系統的權利,否則是無法從 web 下讀取到該檔案的內容,自然這也就形成密碼保護的目的了。

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal