ディスカッション系の拡張を探していたところ、LiquidThreads がよさそうなのでさっそく入れてみた。しかしメインページにて、
MediaWiki internal error.
Exception caught inside exception handler
と表示されるようになってしまった。仕方がないので原因調査開始。
まず現象から。
- 「メインページ」等タイトルが日本語のページはエラーが出て何もできない。
- 「MainPage」等タイトルが英語のページではエラーが出ず、LiquidThreadsも動作。
- LiquidThreadsを外すと問題なし。
何が起こっているのかわからないので、詳細なエラーを表示させてみる。
MediaWikiの設定ファイル「LocalSettings.php」にて、以下を挿入。
error_reporting(E_ALL);
ini_set(“display_errors”, 1);
$wgShowExceptionDetails = true;
$wgShowSQLErrors = true;
$wgDebugDumpSql = true;
挿入場所は「require_once(“$IP/extensions/LiquidThreads/LiquidThreads.php”);」の直前にしてみた。
で、表示されたエラーがこれ。
MediaWiki internal error.
Original exception: exception ‘DBQueryError’ with message ‘A database error has occurred
Query: SELECT DISTINCT thread.* FROM ( thread thread)WHERE (thread.thread_article_title = ‘日本語タイトルのページ’
AND thread.thread_article_namespace = 0)
LIMIT 1
Function:
Error: 1267 Illegal mix of collations (latin1_bin,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘=’ (localhost)
‘ in /usr/share/mediawiki/includes/db/Database.php:661
Stack trace:
#0 /usr/share/mediawiki/includes/db/Database.php(616): Database->reportQueryError(‘Illegal mix of …’, 1267, ‘??SELECT DISTIN…’, ”, false)
#1 /var/lib/mediawiki/extensions/LiquidThreads/classes/LqtThreads.php(158): Database->query(‘??SELECT DISTIN…’)
#2 /var/lib/mediawiki/extensions/LiquidThreads/LqtBaseView.php(168): Threads::where(‘(thread.thread_…’, ‘LIMIT 1’)
#3 [internal function]: LqtDispatch::tabAction(Object(SkinMonoBook), Object(Title), ‘talk’, false, true, Array, ”, ‘?????????’, Array)
#4 /usr/share/mediawiki/includes/Hooks.php(117): call_user_func_array(Array, Array)
#5 /usr/share/mediawiki/includes/SkinTemplate.php(613): wfRunHooks(‘SkinTemplateTab…’, Array)
#6 /usr/share/mediawiki/includes/SkinTemplate.php(679): SkinTemplate->tabAction(Object(Title), ‘talk’, false, ”, true)
#7 /usr/share/mediawiki/includes/SkinTemplate.php(437): SkinTemplate->buildContentActionUrls()
#8 /usr/share/mediawiki/includes/OutputPage.php(968): SkinTemplate->outputPage(Object(OutputPage))
#9 /usr/share/mediawiki/includes/Wiki.php(345): OutputPage->output()
#10 /usr/share/mediawiki/index.php(117): MediaWiki->finalCleanup(Array, Object(OutputPage))
#11 {main}Exception caught inside exception handler: exception ‘DBUnexpectedError’ with message ‘Error in fetchObject(): Illegal mix of collations (latin1_bin,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘=’ (localhost)’ in /usr/share/mediawiki/includes/db/Database.php:788
Stack trace:
#0 /var/lib/mediawiki/extensions/LiquidThreads/classes/LqtThreads.php(162): Database->fetchObject(false)
#1 /var/lib/mediawiki/extensions/LiquidThreads/LqtBaseView.php(168): Threads::where(‘(thread.thread_…’, ‘LIMIT 1’)
#2 [internal function]: LqtDispatch::tabAction(Object(SkinMonoBook), Object(Title), ‘talk’, false, true, Array, ”, ‘?????????’, Array)
#3 /usr/share/mediawiki/includes/Hooks.php(117): call_user_func_array(Array, Array)
#4 /usr/share/mediawiki/includes/SkinTemplate.php(613): wfRunHooks(‘SkinTemplateTab…’, Array)
#5 /usr/share/mediawiki/includes/SkinTemplate.php(679): SkinTemplate->tabAction(Object(Title), ‘talk’, false, ”, true)
#6 /usr/share/mediawiki/includes/SkinTemplate.php(437): SkinTemplate->buildContentActionUrls()
#7 /usr/share/mediawiki/includes/OutputPage.php(968): SkinTemplate->outputPage(Object(OutputPage))
#8 /usr/share/mediawiki/includes/Exception.php(159): OutputPage->output()
#9 /usr/share/mediawiki/includes/Exception.php(186): MWException->reportHTML()
#10 /usr/share/mediawiki/includes/Exception.php(284): MWException->report()
#11 /usr/share/mediawiki/includes/Exception.php(344): wfReportException(Object(DBQueryError))
#12 [internal function]: wfExceptionHandler(Object(DBQueryError))
#13 {main}
「Error: 1267 Illegal mix of collations ~」はテーブルの文字コードが統一されていないと発生するらしいが、関係しそうなテーブルは「latin1_bin」で統一されていた。
このエラーについてさらに調べてみると、「LocalSetting.php」において
$wgDBmysql5 = true;
となっているところを、
$wgDBmysql5 = false;
にしたらエラーがどっかに行ったという発言が海外の掲示板(URL忘れた)にあったので、試してみたらこれがビンゴ。
日本語タイトルのページでもLiquidThreadsが動作するようになった。
ただ、LiquidThreads自体の動作が少し変で、コメントに返信するとエラーになったりする。
まだ格闘は続きそう…。
以下、今回の環境。LiquidThreads以外はUbuntuのパッケージ。
- Ubuntu 10.04 LTS
- apache2 2.2.14
- php 5.3.2
- mysql 5.1.41
- mediawiki 1.15.1
- mediawiki-semediawiki 1.4.0-1
- LiquidThreads-MW1.15-r48763.tar.gz