コメント投稿時のPerlエラーを解消する
私のウェブログは自宅サーバで運用しています。OSは Windows XP です。
で、当初はそれほどでもなかった(というか皆無)Perlのエラーダイアログが、3.11にアップグレードした辺りから画面に5?10枚/日ほど表示されるようになりました。どうもコメント投稿等やエントリー投稿が引き金になっているようです。自分のPCでコメントを投稿しても発生します。またコメント投稿等も正常終了しない(応答が返ってこない)ことがしばしばありました。そのまま放っておくとコメントが二重投稿されてしまうケースもあるようで投稿された方には大変ご迷惑をおかけ致しました。
時間が経過してもいっこうに回復する気配もない(というか待ってて直るはずもない)ので、さすがに困りました。サイトを検索してもそれらしき情報がみつかりません。Perlのバージョンを入れ替えようか、または Movable Type を新規インストールにしようかと策を講じておりました。
が、しつこくサイトを検索していたところようやく下記の記事にたどり着きました。
対処は mt.cfg に下記の1行を追加するというものです。
LaunchBackgroundTasks 0
記事と私の事象は微妙に異なるようですが、「WindowsのPerlでは対応していない機能がある」という文言になんとなくピンときて(笑)、この設定を行ってみることにしました。デフォルトの mt.cfg ではこの値に関する記述はありませんので(追記:記述がないのは 3.0D の mt.cfg です)ファイルの一番下にちょろっと追加。ちなみにこのオプションについては
の下から6番目に説明があります。下記は該当部分の抜粋です。
LaunchBackgroundTasks
タスクの中には、デフォルトで、バックグラウンドで実行されているものもあります。 この仕組みによって、Movable Typeがたとえば再構築など重要なタスクを実行している間、ユーザーや別のソフトウエアはアプリケーションを継続して使うことができます。 ただしこの機能はホスティング環境によっては機能しないこともあります。 効果のない機能がある場合は、LaunchBackgroundTasks 0 を設定してみてください。
具体的な原因は「(Movable Typeが使用する)PerlIS.DLL がfork関数に対応していない(実装されていない)ためにエラーが発生する」ということらしいです。forkというのは簡単に申しますと、いくつかのプログラムを同時に走らせるためのもので、同時に走らせることで処理を早く終わらせられます。ちなみにforkを行っているのは
- lib/MT/Util.pm
の1000行目辺りにある、下記関数の青字部分1ヶ所だけです。
sub start_background_task {
my ($func) = @_;
if (!launch_background_tasks()) { $func->() }
else {
$| = 1; # Flush open filehandles
my $pid = fork();
if (!$pid) {
# child
close STDIN; open STDIN, "</dev/null";
close STDOUT; open STDOUT, ">/dev/null";
MT::Object->driver->init();
$func->();
CORE::exit(0) if defined($pid) && !$pid;
} else {
MT::Object->driver->init();
}
}
}
この対処を実施してからすでに1週間以上経つのですが、エラーは発生しなくなりました。コメントも(やや時間がかかりますが)正常終了します。その代償として新規エントリーの投稿にえらく時間がかかりようになりました(笑)。おそらく並列処理をやめて直列で処理を行っている分、時間がプラスされたのでしょう。コメント投稿も完了するまでに数十秒ほどかかるようです。申し訳ございませんが気長にお待ちになってやってください。
追記:本事象は3.0Dからのアップグレードによるものでした。動作が変化した原因につきましては(o)さんから頂いたコメントを参照ください。
- Movable Typeでエラー発生箇所を特定する方法
- IE9でMovable Typeを利用する方法
- MTIfタグにtagモディファイアを利用する場合の注意事項
- Movable Type 5のブログの設定で「Can't call method "label" on unblessed reference」が発生する問題について
- Movable Type 5.03へのアップグレードで再構築時に「Script Error」が発生する件について(つづき)
- XREA/CORESERVERでMovable TypeのCaptchaが表示されない不具合について
- Movable Type 5.03へのアップグレードで再構築時に「Script Error」が発生する件について
- Movable Typeの復元時に「Malformed UTF-8 character~」エラーとなる対処について
- Movable Type 5で「テンプレート「Create Entry」の再構築中にエラーが発生しました」というエラーが発生する件について
- Movable Type 5で「サーバーに Image::Magickか、Image::Magickの動作に必要な他のモジュールがインストールされていません。」となる事象について
- ダイナミックパブリッシングでURLが重複する事象について
- Movable Type 5(MT5)の FastCGI 環境で管理画面の URL が変更されない事象について
- ブログ記事タイトルを改行できるようにする
- MTEntries タグ + sort_by モディファイアでブログ記事がソートされない件
- 日本語ドメインによると EntryTrackbackData タグの不具合
- Movable Type 5.0(MT5.0)の Include タグと append モディファイア・prepend モディファイアの組み合わせについて
- Movable Type 5.0(MT5.0)で更新通知が送信できない不具合と対処
- Movable Type 5.0 のスケジュールタスクでエラーになる件について
- Movable Type で「~」が「?」に文字化けする事象や日本語のタグが合算できない不具合を解消する
- Movable Type 4.261 でのダイナミックパブリッシングエラーについて
- サーバの不具合
- コメント投稿で「エントリーIDが見つかりません」と表示される不具合について
- ポップアップ画面を用いたコメント投稿(その3:公開テンプレート修正方法)
- コメント投稿者の情報表示をカスタマイズする
- エントリー投稿時のフォームボタンをグレーアウトするプラグイン for Movable Type 3.3x
- Movable Type 4.21 でファイルのアップロードで「不正な要求です。文字コードUTF-8に含まれない文字データを送信しています。」というエラーになる問題について
- コメント投稿者欄が無記名の時に代替名を表示する
- コメント投稿時にフォームボタンをグレーアウトする for Movable Type
- Movable Type でコメント投稿・トラックバックが重くなる事象を解消する
3.11のデフォルトのmt.cfgではLaunchBackgroundTasks 0と書いてありますよ。
3.0では書かれておらず、デフォルトで「1」になっていました。しかし、Background Taskを使う処理がクリティカルなところではOFFになっていて、この値がどう設定されていても問題なく動いていたのです。
こういう仕様変更はドキュメントに書いておいてほしいところですよね。
>(o)さん
こんにちは。
ご無沙汰しております。
たしかに書かれてますね…すいません。
そのような仕様変更があったとは知りませんでした。
アップグレード故の問題だったのですね。
アドバイスありがとうございました!
