PSGI環境でMTの環境変数をプラグインでオーバーライドする時の注意

| コメント(0) | トラックバック(0)

動かない(違うブログのが出てくるねん)ってのが来たのですよね。ずいぶん昔に公開したものなんですけど。気が抜けないっす。

おかしいのは動的にAltTemplatePath(代替テンプレートパス)をセットしているところ。

        my $plugin_tpldir = File::Spec->catdir( $plugin->path, 'tmpl', $tpl_directory );
        $app->config( 'AltTemplatePath', $plugin_tpldir );

何でだろう、と小一時間悩んだのですが、Core.pmを眺めていて、おやっと。

        'AltTemplatePath' => {
            default => 'alt-tmpl',
            path    => 1,
            type    => 'ARRAY',
        },

あれー(いや、ARRAY...)

my @paths = $app->config( 'AltTemplatePath' );
use Data::Dumper;
MT->log( Dumper \@paths );

# $VAR1 = [ '/Applications/MAMP/htdocs/app/alt-tmpl', '/Applications/MAMP/htdocs/app/plugins/CMSContext/tmpl/Blog_1' ];

あ。。。

ConfigMgrで、defineする

と、いうことで、PSGI環境のMTでは、AltTemplatePathはセットすると配列に追加されるのでした。要するに一度セットした値が残っていて、先にマッチしたAltTemplatePathが使われていた模様。CGI環境ではこの問題は起こりません。対策としては、ConfigMgrで、defineしてからセットするということです。

        require MT::ConfigMgr;
        my $mgr = MT::ConfigMgr->instance;
        $mgr->define( 'AltTemplatePath' );

それでは、良いPSGIライフを。

13:35追記

社内からツッコミがあったので、そのまま貼っておくw

一応、単に $app->config('AltTemplatePath', ['plugins/CMSContext/tmpl']); # => ['plugins/CMSContext/tmpl' ]; でもよいのかと。 RT @junnama ARRAY型の環境変数は、$app->config( 'AltTemplatePath', $plugin_tpldir ); みたいにセットしても配列への追加なので、次回以降も残る(初期化されない) $mgr->define する必要がある。#tips #pl
なので、plugins/CMSContext/tmpl を優先するなら:
my $k = 'AltTemplatePath';
my @alt_tmpl_path = $app->config($k);
unshift @alt_tmpl_path, 'plugins/CMSContext/tmpl';
$app->config($k, \@alt_tmpl_path);
…かと思われます。

$app->config($k);
# => ['plugins/CMSContext/tmpl', 'alt-tmpl'];

これはこれで工夫しないと
# => ['plugins/CMSContext/tmpl', 'alt-tmpl'];
# => ['plugins/CMSContext/tmpl', 'plugins/CMSContext/tmpl', 'alt-tmpl'];
# => ['plugins/CMSContext/tmpl', 'plugins/CMSContext/tmpl', 'plugins/CMSContext/tmpl', 'alt-tmpl'];
# => ['plugins/CMSContext/tmpl', 'plugins/CMSContext/tmpl', 'plugins/CMSContext/tmpl', ..., 'alt-tmpl'];
…と、どんどん増えてしまいそうですが。

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/817

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2014年4月24日 13:00に書いたブログ記事です。

ひとつ前のブログ記事は「PHPerのための Movable Type 講座(その12)」です。

次のブログ記事は「世界を変える、ではなく、変わる世界に何を提供するか - 一緒に新しいことやりませんか?」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6