2007年6月 5日

コメントの投稿が遅くなったら[ トラブルシューティング ]

コメントを投稿するときに時間がかかると言う現象が発生しているようです。
この件に関して、シックスアパートのサポートページにQ&Aが掲載されています。

Q. コメントを投稿すると、以前に比べて非常に長い時間がかかります。10 秒以上待たされたり、タイムアウトが発生する場合もあります。

A. 標準プラグイン「SpamLookup」がデフォルトで参照しているサーバーのひとつ、「opm.blitzed.org」が停止したため、コメントの投稿の際、非常に長い時間がかかったり、タイムアウトとなる現象が発生しています。

対応としては、「SpamLookup - Lookups」プラグインの設定を変更すると言うことになります。
詳細は、サポートページにのっているのでそちらを見てください。


※ブログごとにSpamLookupの設定を変更している場合は、上記手順での修正がそれぞれのブログに反映されません。念のため、各ブログの「設定」>>「プラグイン」から、変更が反映されているかを確認してください。
また、ブログの設定に変更が反映されていない場合には、各ブログについても上記手順での修正を行ってください。

ということなので、ブログごとの設定も見てみたほうが良いかもです。

サポートページでは、

また、The SpamHaus Project などの、別のブラックリストサーバーを指定することも可能です。

とありますが、このリストちょっと強力に聞きすぎるときがあるみたいです。
まず、このリストを追加せずにしばらく運用してみて、問題があるようなら、追加してみると言うのがいいのではないかと思いました。
それと、blog.bulknews.netの「rbl.bulkfeeds.jp」というリストも非常に有効だと思います。こちらを試してみるのも良いかと思います。

投稿者 CHEEBOW : 11:13


MovableTypeするならおすすめです!

2006年11月 8日

エントリ投稿時の500エラーを強引に回避する方法、おかわり[ トラブルシューティング, プラグイン ]

前回、「エントリ投稿時の500エラーを強引に回避する方法」のエントリで書いた、投稿時にコメントとトラックバックを停止するというワザ。
これを、自動化できないもんかなーと、プラグインを作ってみたりしたけど、解除するタイミングが難しくて停止したままになっちゃう可能性が高い。
なんとかできないかなーと思って、こんな風にしてみました。

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);

MT->add_task(
    {
        key => 'rename_scripts',
        name => 'Rename scripts',
        frequency => 5 * 60, # every 5 min
        code => sub {$plugin->rename_scripts;},
    }
);

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;
    }

    if ((-e $from_tb) && !(-e $to_tb)) {
        rename($from_tb, $to_tb);
    }
    
    if ((-e $from_comment) && !(-e $to_comment)) {
        rename($from_comment, $to_comment);
    }
}

sub CMSPreSave_entry {
    my ($cb, $app, $entry) = @_;
    
    _rename_scripts($app, 0);

    1;
}

sub hdlr_edit_entry_source {
    my ($eh, $app, $tmpl_str_ref, $param, $tmpl) = @_;

    return unless $param->{saved_changes};

    _rename_scripts($app, 1);

    1;
}

sub rename_scripts {
    my $plugin = shift;
    my $app = MT->instance;

    _rename_scripts($app, 1);

    1;
}

1;

タスクの機能を使って、リネームしたスクリプトを元に戻します。
とりあえず、一時的にリネームしっぱなしになっちゃったとして、後で元には戻るか、と。
ただ、リネームしっぱなしになる時間が結構かなくなる可能性もあるので、コメント、トラックバックを重要視する方には厳しいかも。
リビルドの最初と最後にフックできるといいんだけどなぁ。

投稿者 CHEEBOW : 13:56

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;

投稿者 CHEEBOW : 12:26

2006年2月 9日

MT3.2+SQLiteでrecently_commented_onがうまく働かない問題[ トラブルシューティング ]

Movable Type3.2-ja-2とSQLiteの組み合わせで、recently_commented_onの動作がおかしくなります。
このブログでも、その現象が起きました。
そこで、ちゃちゃっと直してみました。

/lib/MT/Template/ContextHandlers.pmの884行目は

            && MT::ConfigMgr->instance()->ObjectDriver =~ /postgres/) {

こうなっていますが、これを

            && MT::ConfigMgr->instance()->ObjectDriver =~ /postgres|sqlite/) {

こう修正します。
とりあえず、これで、うまく動作しているみたいです。

投稿者 CHEEBOW : 11:02

2005年6月10日

MT3.17日本語版で、search_templatesが日本語にならない時には[ トラブルシューティング ]

MT3.17にアップデートすると、search_templatesが日本語にならなくなっちゃいました。
で、ちょっと修正。

lib/MT/App/Search.pm の 195行目の

$app->set_language($blog->language);
$str = $app->l10n_filter($str);

ここを

$str = MT->translate_templatized($str);

こうすれば、解決するみたいです。

投稿者 CHEEBOW : 11:37

2004年10月21日

バージョンアップで、TypeKey認証がうまくいかなくなったら[ トラブルシューティング ]

MT3.0からMT3.11にバージョンアップした時にTypeKeyによるコメント書き込みの認証を行っている場合、認証がうまく行われないことがあります。
これは、個別エントリーアーカイブの「サインイン」、「サインアウト」のリンクを書き換えると直ると思います。
具体的には、


<a href="<$MTSignOnURL$>&amp;<MTIfNeedEmail>need_email=1&amp;</MTIfNeedEmail>t=<MTTypeKeyToken>&amp;_return=<$MTCGIPath$><MTCommentScript>%3f__mode=handle_sign_in%26static=1%26entry_id=<$MTEntryID$>"> サイン・イン</a>

<a href="<$MTRemoteSignInLink static="1"$>">サイン・イン</a>

<a href="<$MTCGIPath$><$MTCommentScript$>?__mode=handle_sign_in&amp;static=1&amp;entry_id=<$MTEntryID$>&amp;logout=1">サイン・アウト</a>

<a href="<$MTRemoteSignOutLink static="1"$>">サイン・アウト</a>

に書き換えます。

何箇所かあるので、すべて書き換えます。
んで、再構築してやれば、たぶん大丈夫です。

……僕もはまりました……。^^;

あ、それから、関係ないですが、ここでも叫んでおきます。
ゴッゴル! ゴッゴル
第 1 回 SEO コンテスト

(追記)
と、書いた後に気付いたんですが、これ、あちこちですでに解決方法がかかれてましたね。^^;

投稿者 CHEEBOW : 11:29