のみまくし日記

毎日が文化祭の前日、そんな環境っていいですよね。この日記は未来の自分へのメッセージです。

2004年02月10日 ()

Sledge: tmpl_dirname と私

謎の500エラー ですが、解決シマシタ♪

Sledge::Doc::Tutorial に書いてますが tmpl_dirname は クラスデータとして登録されます。ひとつのクラスで、別々の tmpl_dirname を扱うことは出来ないのです。つまり、下記のようなコードはダメ。

sub dispatch_foo {
	$self = shift;
	__PACKAGE__->tmpl_dirname('/foo');
	$self->load_template('index');
	:
	:
}

sub dispatch_bar {
	$self = shift;
	__PACKAGE__->tmpl_dirname('/bar');
	$self->load_template('index');
	:
	:
}

ただし、CGI版では問題なく動きます。ところが mod_perl で動かすと最初に呼ばれた tmpl_dirname がクラスデータなのでキャッシュされ、たとえば 最初に dispatch_foo を呼び出し、同じ httpd が 次に、dispatch_bar をよびだすと tmpl_dirname は /foo/index を見に行きます。

ちょうどこの問題が発生したときは、Sledge::MobileGateをいろいろ変えていたり、課金プラグインを作っていたりしたときで、そっちの問題かとおもって、遠回りしてしまいました。。

解決方法は簡単で、

sub dispatch_foo {
   $self = shift;

   $self->load_template('/foo/index');
   :
   :
}

sub dispatch_bar {
   $self = shift;

   $self->load_template('/bar/index');
   :
   :
}

とするだけです。初めからそうしろよって感じですね。なんで、こんな変な使い方をしていたのか。。。バカっ(かわいらしく)

この問題を解決したとき、天才♪ とか一瞬思ったことは恥ずかしいので内緒にしておいて下さい。

ともかく、自分が作ったバグをなおしただけなのですが、非常に達成感があるわけで。(BERO)

Perl posted by takefumi | この日記へリンク | コメント(0) | トラックバック(0)

この日記へのトラックバック

この日記へのコメント