2005年1月21日金曜日

個別アーカイブの再構築でエラー

突然、個別アーカイブの再構築を行うとこんなエラーがでて再構築に失敗するようになってしまいました。

>

Reading from filehandle failed at /usr/local/www/mt/lib/MT/FileMgr/Local.pm line 128.
<

該当のLocal.pmをのぞくとDigest::MD5のaddfileメソッドでこけているみたいです。

>

124 my $fh = gensym();
125 open $fh, $file or return 1;
126 if (eval { require Digest::MD5; 1 }) {
127 my $ctx = Digest::MD5->new;
128 $ctx->addfile($fh);
129 close $fh;
<

そこで開けないファイルの中身をみようとしたんですが、

>

$ cat 000224.html
cat: 000224.html: Input/output error
<

。。。
う~ん、原因はわかりませんが、ファイルが壊れてしまっていたみたいです。壊れたファイルを削除して再構築をかけたら、今度は問題なく完了しました。めでたしめでたし。



7 件のコメント:

  1. 突然の質問で失礼します。
    月移動ができるカレンダーをMovableTypeで導入しようと色々いじっていたら私も同じようにLocal.pmのline128でエラーが出るようになってしまいました。
    hori-uchiさんは開けないファイルを削除して解決されたとのことですが、その該当ファイルというのはどのように見つければよいのでしょうか。
    MovableType初心者でプログラムもそれほど詳しくないので、サルにもわかるように教えていただけましたら非常にうれしく思います。
    何卒よろしくお願いいたします。

    返信削除
  2. 38brainさんはじめして。
    僕の場合はLocal.pmの125行目、
    open $fh, $file or return 1;
    のすぐ後に
    warn "$file\n";
    と言う一行を入れて、処理対象のファイルを特定し、そのファイルの中身を確認したところ、ファイルが壊れていたと気づいたのでした。
    ただ、今回のようにファイルが壊れていたというのは稀なケースかもしれません。
    "Reading from filehandle failed"でググってみると、MTのテンプレートタグの記法が間違っていると同様のエラーがでるというような記事が目につきました。ですので、まずはMTタグに間違っているところがないか確認してみてはどうでしょうか?

    返信削除
  3. 早速のご回答ありがとうございます。
    おっしゃる通りMTのテンプレートタグを追加するとエラーが出るようになりました。
    月移動カレンダー用のテンプレートとアーカイブの関連付けがうまくいっていないようです。追加したものを消すと直りました。
    適切なアドバイスありがとうございました。
    もう少しタグの辺りがおかしな事を書いていないかチェックしてみます。
    私もせめてperlぐらいは人並みに組めるようになりたいものです(いつになるやらですが)。MTも初めてまだ1週間ぐらいなので右も左もわからない状態で、みなさんの知識の豊富さには恐れ入ります。
    今後とも何かありましたらよろしくお願いいたします。
    時々遊びに来させていただきます。

    返信削除
  4. 問題が解決しそうでよかったです。
    MTを使うならperlができるとより楽しいですから、是非覚えてください。(perlをこっそり宣伝w)
    それはともかく、僕でわかりそうなことであればまた聞いてください。
    ではではー。

    返信削除
  5. はじめまして。
    突然なのですが、質問させてください。
    実は、上記と全く同じ症状が先日から起きており、いろいろ手を尽くしてみたのですが、全く解決せず、困り果てております。
    常に同じエントリのところでこのエラーが出て再構築が止まります。
    該当エントリを保存しなおそうとしてもエラーが出てしまいます。
    削除しても次のエントリが同様にエラーになります。
    それ以降(日付的には以前)のエントリも同様です。
    hori-uchiさんがコメントで記載されていたとおり、warn "$file\n"; を追加してみたのですが、該当ファイルの特定というのがよくわかりませんでした。
    もし何かお分かりであればお教えいただけると幸甚です。

    返信削除
  6. KAZさんはじめまして。
    テンプレートファイルをいじったわけでないのであれば、ファイル自体が壊れたのかもしれませんね。
    だとしたら、ウェブログの設定で確認できる「ローカル・アーカイブパス」以下のhtmlファイルを削除して、再構築すれば直るかもしれません。
    削除する前にアーカイブディレクトリをバックアップしておいたほうがいいと思います。削除よりはリネームしたほうがいいかも。。
    ちなみに、
    warn "$file\n";を追加したあと再構築すると、画面上かapacheのエラーログに再構築対象のファイル名が出力されて確認できたと思ったんですが、今試したら出てきませんね。。
    最近のバージョンのMTはwarnを出力しないような処理がされてるのかもしれませんね。。

    返信削除
  7. hori-uchiさん、ありがとうございます!
    該当っぽいエントリ削除とかはやってみてたのですが、アーカイブフォルダ全体ってところまで頭が回りませんでした。
    早速、試してみました。
    ・・・
    出来ました!!!!!!
    ありがとうございます!!!

    返信削除