liquidthreadsで発生したエラー画面MediaWikiにハマり中。

ディスカッション系の拡張を探していたところ、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
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中