最近頻繁出現的 500 error

剛從兩個多月的米蟲生活回到職場,到現在才剛滿一個月沒多久,所以忙到有點無暇照顧 Blog。最近發現我的 Blog 常出現 500 error,求助於 Dreamhost 的 support,結果竟然是直接把我的 plugin 目錄更名就恢復正常了,根據 Dreamhost 的說法好像是某個 plugin 造成記憶體消耗超過我可以使用的範圍。

我自己嘗試了幾次之後發現,如果出現 500 error,就用 FTP 去把 /wp-content/cache 裡的檔案全部砍掉就可以恢復正常,不過老是要這樣砍好像也不是辦法…orz

不曉得是哪個 plugin 造成 wp-cache 的錯誤,或是 wp-cache 本來就在 Dreamhost 的環境上會有問題,反正目前的解決方法是先停掉 wp-cache,看看後續還會不會有相同的問題產生。

WordPress 升級至 2.5.1

距離 2.5.1 釋出已經一個多了,我的 Blog 還停留在 2.3.3 的版本。其實也就是一個懶字,才一直拖到今天把 WordPress 升級。

升級的步驟如下:

  • 備份檔案 (資料庫的備份系統商有定期在做,所以省略)
  • 到後台關閉所有 Plugin
  • 將下載的 2.5.1 檔案上傳至伺服器 (wp-config.php 除外)
  • 利用新功能自動更新 Plugin,並開啟所有 Plugin
  • 至前台檢查有無異狀

就這麼簡單。

WordPress 2.2 上使用 Sidebar Module 的解法

先前提過,由於 2.2 版內建 Sidebar Widgets,使得 Sidebar Module 會無法運作,而解決方案是安裝 Disable WordPress Widgets plugin

但是實際安裝後,會發現在後台新增或修改時會出現「You must specify a valid module name」的錯誤訊息。求教於天佑後,他找出了解法

原來除了安裝 Disable WordPress Widgets plugin 外,如果不是用 K2 模板 (像我) 的,因為獨立版本的 SBM 很久沒更新了,所以要先去下載最新穩定版本的 K2 (目前是 0.95 RC1)。然後解開下載的壓縮檔後,將 js 資料夾內的 sbm.js.php 上傳至 SBM Plugin 目錄內的 js 資料夾。

接著,修改 SBM plugin 資料夾內的 sbm.php,將

PHP:
  1. <script type="text/javascript" src="&lt;?php SBM::output_url(); ?&gt;/js/sbm.js"></script>

修改為

PHP:
  1. <script type="text/javascript" src="&lt;?php SBM::output_url(); ?&gt;/js/sbm.js.php"></script>

即可,在此謝謝天佑 :)

Upgrade to WordPress 2.2

今天研究了一下其他人的升級步驟,稍微花了一點時間把我的 WordPress 升級到 2.2 版了。

由於 2.2 版內建了 Sidebar Widgets,使得我原先使用的 Sidebar Modules 變得無法使用。因此參考了天佑的文章,安裝了 darrell.schulte 所寫得 Disable WordPress Widgets plugin 來關閉 Sidebar Widgets。

因為我是把舊的版本整個砍掉,所以又把先前參照星宿喵的做法修改的 TinyMCE 給改回,也別忘了加進 iG:Syntax HiliterQuick Tags

另外這次升級遇到了幾個問題,首先是執行 upgrade.php 的時候出現找不到 advanced-cache.php 的錯誤訊息。有人跟我發生同樣的錯誤,解決的方法只要打開 wp-config.php,找到

PHP:
  1. define('WP_CACHE', true);

這行,把他註記或是刪除即可。

還有就是我發現升級完之後 Tag Page 都變成 404 Error,只要到管理介面的選項 > 固定網址 ,再按一次更新就好了。

找解決方法的過程中,意外發現了 UTM 造成的 Search 錯誤。原來是把 LEFT JOIN 寫成了 INNER,使得沒有下到 Tag 的文章就無法被搜尋到了( 就某些方面來說,這樣也挺好的? XD )。打開 ultimate-tag-warrior-actions.php,找到第 849 行:

PHP:
  1. $join .= " LEFT JOIN $tablepost2tag p2t on $wpdb->posts.ID = p2t.post_id INNER JOIN $tabletags on p2t.tag_id = $tabletags.tag_id ";

改為

PHP:
  1. //$join .= " LEFT JOIN $tablepost2tag p2t on $wpdb->posts.ID = p2t.post_id INNER JOIN $tabletags on p2t.tag_id = $tabletags.tag_id ";
  2. $join .= " LEFT JOIN $tablepost2tag p2t on $wpdb->posts.ID = p2t.post_id LEFT JOIN $tabletags on p2t.tag_id = $tabletags.tag_id ";

如此即可。