« 「改訂新版 Movable Type 標準ハンドブック」明日発売です | メイン | エントリ投稿時の500エラーを強引に回避する方法、おかわり »
2006年11月 2日
エントリ投稿時の500エラーを強引に回避する方法[ トラブルシューティング ]
最近ときどきエントリを投稿しようとしても500エラーでまったく投稿できないというときがありました。
エントリの投稿画面で「保存」ボタンを押しても、なんの反応も無くしばらくすると500エラー。
何とかならんもんだろうか、と思って、ちょっと試してみたのですが結構効果があったので、書いてみたいと思います。
方法は簡単で、mt-tb.cgiとmt-comments.cgiを投稿するときだけリネームするなりして無効にします。
エントリの投稿をしようとする前に、この2つのファイルをリネームします。とりあえず、ファイル名の最初に適当に1文字入力しておくとかで良いと思います。
で、ゆっくりエントリを書いて、投稿が終わったら元の名前に戻す、と。
手間はかかりますが、結構効果的な気がしています。
おためしあれ。
あ、で、話は変わりますが、「改訂新版 Movable Type 標準ハンドブック」本日発売です!
よろしくお願いしますー。
でもやっぱめんどくさいので、プラグインにしてみました。
リネームしっぱなしになっちゃうことも、もしかするとあるかもしれないですけども……。
[追記]
たぶん、XML-RPC経由やAtomAPI経由、モブログなどで投稿するとリネームしっぱなしになる可能性がありそう。これ、なんとかならんもんだろうか……。
package MT::Plugin::Silence;
use strict;
use MT::Plugin;
@MT::Plugin::Silence::ISA = qw(MT::Plugin);
use vars qw($PLUGIN_NAME $VERSION);
$PLUGIN_NAME = 'Silence';
$VERSION = '0.50';
use MT;
my $plugin = new MT::Plugin::Silence({
name => $PLUGIN_NAME,
version => $VERSION,
description => "Silence",
author_name => 'CHEEBOW',
author_link => 'http://cheebow.info/chemt/',
});
MT->add_plugin($plugin);
MT->add_callback('CMSPreSave.entry', 9, $plugin, \&CMSPreSave_entry);
MT->add_callback('MT::App::CMS::AppTemplateOutput.edit_entry', 9, $plugin, \&hdlr_edit_entry_source);
sub instance { $plugin; }
sub _rename_scripts {
my ($app, $dir) = @_;
my $tb_script = File::Spec->catfile($app->{mt_dir}, $app->config('TrackbackScript'));
my $comment_script = File::Spec->catfile($app->{mt_dir}, $app->config('CommentScript'));
my $renamed_tb_script = $tb_script . ".$PLUGIN_NAME";
my $renamed_comment_script = $comment_script . ".$PLUGIN_NAME";
my ($from_tb, $to_tb);
my ($from_comment, $to_comment);
if ($dir == 0) {
$from_tb = $tb_script;
$to_tb = $renamed_tb_script;
$from_comment = $comment_script;
$to_comment = $renamed_comment_script;
} else {
$from_tb = $renamed_tb_script;
$to_tb = $tb_script;
$from_comment = $renamed_comment_script;
$to_comment = $comment_script;
}
rename($from_tb, $to_tb) if -e $from_tb;
rename($from_comment, $to_comment) if -e $from_comment;
}
sub CMSPreSave_entry {
my ($cb, $app, $entry) = @_;
_rename_scripts($app, 0);
}
sub hdlr_edit_entry_source {
my ($eh, $app, $tmpl_str_ref, $param, $tmpl) = @_;
return unless $param->{saved_changes};
_rename_scripts($app, 1);
}
1;
use strict;
use MT::Plugin;
@MT::Plugin::Silence::ISA = qw(MT::Plugin);
use vars qw($PLUGIN_NAME $VERSION);
$PLUGIN_NAME = 'Silence';
$VERSION = '0.50';
use MT;
my $plugin = new MT::Plugin::Silence({
name => $PLUGIN_NAME,
version => $VERSION,
description => "Silence",
author_name => 'CHEEBOW',
author_link => 'http://cheebow.info/chemt/',
});
MT->add_plugin($plugin);
MT->add_callback('CMSPreSave.entry', 9, $plugin, \&CMSPreSave_entry);
MT->add_callback('MT::App::CMS::AppTemplateOutput.edit_entry', 9, $plugin, \&hdlr_edit_entry_source);
sub instance { $plugin; }
sub _rename_scripts {
my ($app, $dir) = @_;
my $tb_script = File::Spec->catfile($app->{mt_dir}, $app->config('TrackbackScript'));
my $comment_script = File::Spec->catfile($app->{mt_dir}, $app->config('CommentScript'));
my $renamed_tb_script = $tb_script . ".$PLUGIN_NAME";
my $renamed_comment_script = $comment_script . ".$PLUGIN_NAME";
my ($from_tb, $to_tb);
my ($from_comment, $to_comment);
if ($dir == 0) {
$from_tb = $tb_script;
$to_tb = $renamed_tb_script;
$from_comment = $comment_script;
$to_comment = $renamed_comment_script;
} else {
$from_tb = $renamed_tb_script;
$to_tb = $tb_script;
$from_comment = $renamed_comment_script;
$to_comment = $comment_script;
}
rename($from_tb, $to_tb) if -e $from_tb;
rename($from_comment, $to_comment) if -e $from_comment;
}
sub CMSPreSave_entry {
my ($cb, $app, $entry) = @_;
_rename_scripts($app, 0);
}
sub hdlr_edit_entry_source {
my ($eh, $app, $tmpl_str_ref, $param, $tmpl) = @_;
return unless $param->{saved_changes};
_rename_scripts($app, 1);
}
1;
投稿者 CHEEBOW : 2006年11月 2日 12:26