pepponの日記 このページをアンテナに追加 RSSフィード

2010-10-06

Xslateでテンプレート大きいと困った件 ←修正されました

CatalystCatalyst::View::Xslateを利用しているとき、特定のページで表示できない場合があった。

特定のページは[% hoge %]を使っていないテンプレートで、サイズは47KB、Catalyst::View::TTを利用すると問題なくて、Catalyst::View::Xslateの場合表示できなくなる。

catalystテストサーバ起動時に表示されるデバッグログにも何も表示されずそのままな状態。

で、試しに問題のあるテンプレートをコピーして違う名前でアップロード、中身は同じの別名テンプレートで表示することにしてみた。

$c->stash->{template} = 'template/hoge/moge/mondaino.tt';
↓
$c->stash->{template} = 'template/hoge/moge/mondaino1.tt';

そしたら..問題なく動いた。。。。。?

Text::Xslateで試してみた。

use utf8;
use Text::Xslate;

my $tx = Text::Xslate->new(
    # the fillowing options are optional.
    path       => ['.'],
    cache_dir  => "/tmp/.xslate_cache",
    cache      => 1,
    syntax => 'TTerse',
    module => [
	'Text::Xslate::Bridge::TT2Like'
    ],
);

my %vars = (
);

# for files
print $tx->render('root/template/toppage.tt', \%vars);

1回目問題なく表示するも2回目でSegmentation fault

テンプレートを小さくしてみると2回目以降も問題なく表示された。

大きなテンプレートだと問題があるのかな?

http://hibari.2ch.net/test/read.cgi/php/1279999782/

IDにPerlが出たら神!PHPが出たらシメジ Part3

テンプレートにしてみた。

テンプレートの中身を上記2chのソースをコピペしてテンプレートにしてみた。 ファイルサイズは32KB

1回目OKも2回目以降Segmentation fault

.ttcキャッシュディレクトリに生成されている。

で、途中のレスをがんがん消して12KBまで落とすと、2回目以降も問題なく表示された。

環境はCentOS5.4、perl 5.8.8、Text::Xslateは$VERSION = '0.2008'

なんとなくうちだけの問題そうな気はする・・・ とりあえずは大きなテンプレート(1個だけだけど)はCatalyst::View::TTを使って動かしてる。 

※2010年10月6日

http://d.hatena.ne.jp/gfx/20101006/1286363284

対応していただいたようです。 本件は修正されていますので問題なく利用できます!

gfxgfx 2010/10/06 19:35 詳細な報告ありがとうございます。

こちらでも、非常に大きなファイルをrenderしようとすると落ちる現象を確認しました。
どうもコンパイル済みテンプレートのロードの際に正規表現エンジンを酷使しすぎたらしく、5.12.2だと"Complex regular subexpression recursion limit (32766) exceeded"といってdieしますし、古いperlだとSEGVします。
先ほどリリースした0.2009では修正済ですのでご確認ください。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。