2004年10月22日

分割エクスポート

今、このヒビノアワが動いているのは、WebArenaというレンタルサーバ上でなんだけども、ここは、CGIのタイムアウトに関して非常にシビアで、通常のエントリは問題ないのだけれど、「すべてを再構築」したり、エクスポートしようとしたりすると、途中でInternalServerErrorが発生してしまう。
この状況に嫌気が差してきて、別のところに移行しようかなーと思っていた。
しかし、なにしろ、エクスポートがうまくいかないんだから、どうにもならない。
というわけで、分割エクスポートする方法がないか考えてみた。

結局のところ、すべてを一度にエクスポートするからいけないわけだ。
小さい単位で、何度かに分けてエクスポートすればうまくいくはずだ。理論的には。

というわけで、MTのエクスポート部分の改造をしてみた。
ちなみに、これは、MT2.661のソースでの修正。

lib/MT/App/CMS.pmの中のexport関数を修正する。

    my $iter = MT::Entry->load_iter({ blog_id => $blog_id },
        { 'sort' => 'created_on', direction => 'ascend' });

この部分を

    my $y = '2004';
    my $m = '01';
    my $d = '01';
    my $ey = '2004';
    my $em = '11';
    my $ed = '01';
    my ($start, $end) = ($y . $m . $d . '000000', $ey . $em . $ed . '235959');
    my $iter = MT::Entry->load_iter({ blog_id => $blog_id ,
                                      created_on => [ $start, $end ] },
        { range => { created_on => 1 }, 'sort' => 'created_on', direction => 'ascend' });

例えば、こんな感じに置き換える。
$y、$m、$dは、始まりの日時。$ey、$em、$edは終わりの日時。月日が1桁の時は0を入れてあげてください。(ほんとは、sprintfを使うべきなんだけど^^;)

で、これを、アップロードして、エクスポートを実行。
また、日付を変えて、アップロード、エクスポートと言う感じ。
スマートではないけど、とりあえず、これで、目的の動作はするみたい。

Posted by CHEEBOW at 2004年10月22日 18:06 | TrackBack
コメント
この記事へコメントする