BLOG: 2007年11月アーカイブ
ついには、テストコードまで書きはじめモジュール単位でテストをし始めてしまったのですが、ふと我にかえってエラー文を読み直してみました。
unblessed referrence......unblessed.....
Perlはまったくの素人なので、unreferrence・・・参照メソッドがないって思いこんでいたのですが、エラーが言っているのはblessされていない参照ってことです。
コードではしっかりとオブジェクトがブレスされているのですが・・・・
も、もしや、ベータ版から上書きしている人には呪いがかかっているのでは!
・
・
・
解呪
どうもプラグインフォルダにのこっていたExtensibleArchivesが癌らしい。
同じ苦しみを味わっているひとに少しでも祝福を!
先日セットアップしたMovableType4.01に本格的に移行しようとおもい、新しいサーバにMySQLとPerlをインストールして、データを移行しました。
インポートも無事にすみ、さあ再構築!というところでエラーです。
close Can't call method "archive_label" on unblessed reference at lib/MT/App/CMS.pm line 13925.
よくよく触ってみると、ブログの公開設定でもエラーがでます。
Can't call method "entry_class" on unblessed reference at lib/MT/App/CMS.pm line 13215.
・・・またCMS.pmかよ。
ソースコードを追いかけてみると、
if ( $at && $at ne 'None' ) {
@blog_at = split /,/, $at;
foreach my $t (@blog_at) {
$archiver = $app->publisher->archiver($t);
next unless $archiver; # ignore unknown archive types
push @at, $t;
$archive_label = $archiver->archive_label;
$archive_label = $at unless $archive_label;
$archive_label = $archive_label->()
if ( ref $archive_label ) eq 'CODE';
push(
@data,
{
archive_type => $t,
archive_type_label => $archive_label
}
);
}
}
Blogの公開設定がきちんとされていない場合は、公開設定をするように警告すべきところのロジックになんらかのバグがあるっぽい。
なんかarchive(書庫)関係のデータがNull参照しているっぽい。
データベースがなんらかの不整合を起こしている可能性を疑い、新しいDBインスタンスや、SQLLiteに変えてみても改善の兆候がないです。
ネットで原因探そうにも、「IIS MovableType 4.0」とかで検索すると自分のサイトが一番上にくるありさま・・・。
仕方ないので、ソースコードに手をいれてみました。13215~13225行までコメントアウト!
for my $at ( split /\s*,\s*/, $blog->archive_type ) {
my $archiver = $app->publisher->archiver($at);
next unless $archiver;
# next if 'entry' ne $archiver->entry_class;
# my $archive_label = $archiver->archive_label;
# $archive_label = $at unless $archive_label;
# $archive_label = $archive_label->() if ( ref $archive_label ) eq 'CODE';
# push @data,
# {
# archive_type_translated => $archive_label,
# archive_type => $at,
# archive_type_is_preferred =>
# ( $blog->archive_type_preferred eq $at ? 1 : 0 ),
# };
}
そうすると、一応公開設定の画面が表示されるようになって、本来優先するテンプレートがドロップダウンで指定できるはずの場所が空です。
優先アーカイブタイプ 有効なアーカイブがありません。
この情報を元にコードを追っかけていくと、WeblogPublisher.pmのcore_archive_typesメソッドあたりにたどりつきます。
この中で指定されているArchiveTypeの定義が下のほうに書いてあるので、確認するときっちりentry_classがあります。
でも、エラーをみるとこのエントリークラスが呼び出せていないようです。
3.3までのWebPublisher.pmみるとこんなクラスないんだよなぁ・・・このあたりのPerlの基本設定でどこか環境依存のコードがまじっていそうなんだけど見当がつかない・・・。
あきらめ半分で、3.3の動いている古い環境ににMT4をインストールしてみる。
・・・うごくじゃん、構築できるじゃん。
なにが違うんだー、Active PerlをアンインストールしてXAMPPいれなおしてみるもダメ。
フォルダ権限から、IISの設定まで全部見直してみたけどダメ。
エラーメッセージやオブジェクトの名前で検索してもダメ。
・・・もうFedora Coreの入っているサーバにインストールしたほうがいいか・・・。
