MediaWikiのカテゴリを追加してもカテゴリページに反映されないときの対処法

どうも、中原電車区のトトロです。

さて、9月からコツコツ作ってきた鉄道総合Wikiを一応使えるくらいまでの状態にセットアップして一応リリース?しました。

鉄道総合WikiはWikipediaとかUncyclopediaとかで有名なMediaWikiを採用しています。

これは、管理人がMediaWikiの運営経験が何度かあって触ったことがあるのと実際Wikipediaで使われてるだけあって非常に使いやすいからです(PukiwikiとかもあるけどMediaWikiは拡張機能も盛りだくさんだし閲覧者も使いやすいと思うので実質一択)。

なんですが、VPSに移行してから色々トラブルが発生したので取り敢えず備忘録程度にまとめておきます(まあソフトを自由にインストールできるようになったのでインストールできるようになった拡張機能も増えましたが)。

カテゴリを追加してもカテゴリページに反映されない

はい、最近出たトラブルがこれです。

一応VPSに新たにテスト用Wikiと前のXreaに残しておいたWikiでテストしたんですが、テスト用Wikiでは何故かダメ、Xreaの方は普通に追加すると反映されました()

カテゴリって結構Wikiの中で大事だと思うので割と死活問題です…(´・ω・`)

具体的にどういう状態かというと、

普通に[[Category:テスト]]とか書いてページをカテゴリに追加しても、その記事にはカテゴリは反映されるんだけどカテゴリページの方には「現在このカテゴリには、ページまたはメディアがありません。」とか言われて何も反映されない、という感じです…

色々やってもなかなか原因がつかめないでいたのですが、こんな英語フォーラムを発見。

ここを参照してやってみると正常に反映されるようになりました!()

解決方法

皆さんそれを探しに来てると思うので、私の解決法です。

  1. MediaWikiをインストールしているサーバにSSH(Windows機ならTera Term等)かなんかでコマンドライン接続(鯖のコマンドが打てる状態)できようにします。
  2. Wikiをインストールしてるディレクトリ(例:/var/www/wiki/・Xreaとかだと/virtual/○○/public_html/w/)にcdコマンドで移動
  3. php maintenance/runJobs.php

    を端末にコピペして実行する。

  4. ついでに念のため
    php maintenance/refreshLinks.php
    php maintenance/rebuildall.php

    を端末にコピペして実行する。

これだけです…()

リロードすると普通にカテゴリページにも追加したページが反映されてるはずです。

また反映されなくなったらまた実行すればいけそう?

え?SSH接続レン鯖だから無理?Xreaならできます。

違う鯖で本当にないんだったら最後の奥義で

<?php exec('php /Wikiまでのフルパス/maintenance/runJobs.php') ?>

をコピペしてテキストファイル作って貼り付けてtest.phpとかで保存して、

そのPHPファイルをブラウザから開いたら実行できるかと(テストしてないから知らんけど)

この方法は割と他のメンテナンススクリプトでも使える気がします(ただしexec関数は危険なので任意のコマンドを実行されないように注意)

というかなんでこうなった的なお話

全て私の所為です。

…というのも、MediaWikiの設定ファイルLocalSettings.phpにどっかでこれ適用すると軽くなるよー的なのが書かれてたのを丸コピしてたのが悪いみたいで…

$wgJobRunRate = 0.01;

を設定してたのが諸悪の根源です…()

MediaWikiにはジョブキューという機能があり、ちょっと重い処理をバッチ処理的に実行する奴の事らしいです。

デフォルトでは上の方に書かれているジョブからページが読み込まれるたびに1個づつジョブが実行されていきます。

なんですが、それって少し重い処理なので、クソ重サーバーの場合それを0.01とかにしたら軽くなるよって話だったみたいです。

カテゴリの追加も何故かジョブキューによって実行・反映されるので、0.01にするとジョブキュー内の1つの項目が100ページビューごとに平均して実行されるのでカテゴリがなっかなか反映されないの、分かりますよね?

そういうことです。

教訓:LocalSettings.phpの内容は適当に丸コピしないで意味を確認する

というわけで、

$wgJobRunRate = 1;

(デフォルト値)に戻して一件落着

MediaWikiは奥が深いですねえ…(というか機能多すぎ)

それではまた。

コメント