psgiファイルに __DATA__ があるとうまく動かない?→動きます
※2010/4/6 追記
このエントリは間違いです。動きます
のかな?
plackupコマンドでうまく表示されなかった。
Mojolicious::Liteのサンプルってほとんど__DATA__使ってるからハマってしまった。
以下のように、テンプレートを別ファイルにする必要あり。
また、plackup時にはルートがplackupコマンドの場所になってしまうので
テンプレートファイルの場所も明示的に指定しないといけない。
sample.psgi
use Mojolicious::Lite; app->renderer->root('/var/www/html/mojo/templates'); # / get '/' => 'index2'; # /foo get '/foo' => 'foo'; # /bar get '/bar' => sub { my $self = shift; $self->render_text('Hi!') } => 'bar'; shagadelic;
/var/www/html/mojo/templates/index2.html.ep
<a href="<%= url_for 'index2' %>">Home</a>.
/var/www/html/mojo/templates/foo.html.ep
<a href="<%= url_for 'foo' %>">Foo</a>. <a href="<%= url_for 'bar' %>">Bar</a>.
参考
http://search.cpan.org/~kraih/Mojolicious-0.999924/lib/Mojolicious.pm#renderer
http://search.cpan.org/~kraih/Mojolicious/lib/Mojolicious/Lite.pm
※2010/4/8 動作しなかったコードについて追記
動作しなかったのは生plackupではなく、mod_proxy+plackupで動かしてた場合のみ。
動かなかったときは以下のようなレンダリングしてた。
get '/' => sub { my $self = shift; my $html = $self->render_partial(); # FillInFormとかほげほげ... $self->res->body($html); } => 'index';
このコードでもplackupで5000番ポート直接見ると問題なく表示されてるんだけど、
apache経由で見ると表示がおかしい(ソース+ヘッダーがテキストでそのまま表示される)。
症状から見てHTTPヘッダーがうまくいってなさそうな感じ。
てかコードよく見たらヘッダー設定してない…
get '/' => sub { my $self = shift; $self->render_text('Hi!') my $html = $c->render_partial(); # FillInFormとかほげほげ... $self->res->code(200); $self->res->headers->content_type('text/html; charset=utf-8'); $self->res->body($html); } => 'index';
こうしたらapache経由でも問題なく表示されました。
初心者過ぎですみません…
でもなんでテンプレを外出しにするとうまくいくんだろうか