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)
posted by takefumi
|
この日記へリンク
|
コメント(0)
|
トラックバック(0)

