Helper::Lighttpd #4
MIME::Types
が入ってたらそっからがーって mimetype.assign をはくようにした。
てけとう。
でも、mime-typeが指定されてなくて困るのは、FirefoxでCSSが適用されないってぐらいな気がするというかそんな感じなのでとりあえずこれで。
Helper::Lighttpd #3
-d
オプションもつけた。-Debug
してなくてもデバッグ出力できるやつ。まぁserver.pl
と同じ。
$ ./script/myapp_lighttpd.pl -l /usr/sbin/lighttpd -d
2006-09-09 15:45:39: (log.c.75) server started
[debug] Debug messages enabled
[debug] Loaded plugins:
.----------------------------------------------------------------------------.
| Catalyst::Plugin::ConfigLoader 0.13 |
| Catalyst::Plugin::Static::Simple 0.14 |
'----------------------------------------------------------------------------'
[debug] Loaded dispatcher "Catalyst::Dispatcher"
[debug] Loaded engine "Catalyst::Engine::FastCGI"
[debug] Found home "/home/typester/tmp/MyApp"
[debug] Loaded Config "/home/typester/tmp/MyApp/myapp.yml"
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class | Type |
+-----------------------------------------------------------------+----------+
| MyApp::Controller::Root | instance |
'-----------------------------------------------------------------+----------'
[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private | Class | Method |
+----------------------+--------------------------------------+--------------+
| /default | MyApp::Controller::Root | default |
| /end | MyApp::Controller::Root | end |
'----------------------+--------------------------------------+--------------'
[info] MyApp powered by Catalyst 5.7001
Yes! YEs!
あとは静的ファイルの mime-types をちゃんとサポートすれば、server.plいらない気がする。
perl -d するとき以外は。
error-handler-404 で指定したスクリプトで 404 返すと
2006-09-09 14:58:36: (connections.c.1422) Warning: Either the error-handler returned status 404 or the error-handler itself was not found: /script/myapp_fastcgi.pl 2006-09-09 14:58:36: (connections.c.1424) returning the original status 404 2006-09-09 14:58:36: (connections.c.1426) If this is a rails app: check your production.log
とか言われるわけだが、404を返す正しい方法が何かあるのだろうか?
Helper::Lighttpd #2
昨日のやつ、
このパッチ当てないとうまく動かんよ、って書くの忘れてた。
あと、myapp_lighttpd.pl に -p オプションつけるとlighttpdの設定を標準出力に出すようにしてみた。
これで、lighttpd.confで
include_shell "/path/to/myapp_lighttpd.pl -p -approot /myapp/"
とか書くだけで設定完了みたいな。
まだオプション足りなくて設定きめうちで微妙だけど、なんかいいアイデアな気がする。
Catalyst::Helper::Lighttpd
とか作った。
http://svn.unknownplace.org/public/library/perl/trunk/Catalyst-Helper-Lighttpd/
これいれると、
./script/myapp_create.pl Lighttpd
でscriptディレクトリにmyapp_lighttpd.plができる。これがlighty使ったテストサーバー。
lighttpdにPath通ってれば
./script/myapp_lighttpd.pl
叩くだけでOK。デフォポートは3000。他オプションは-h
で。
FastCGIでテストサーバーしたい!
$ CATALYST_DEBUG=1 ./script/myapp_fastcgi.pl -l :3001 [debug] Debug messages enabled [debug] Loaded plugins: .----------------------------------------------------------------------------. | Catalyst::Plugin::ConfigLoader 0.13 | | Catalyst::Plugin::Static::Simple 0.14 | '----------------------------------------------------------------------------'
[debug] Loaded dispatcher "Catalyst::Dispatcher"
[debug] Loaded engine "Catalyst::Engine::FastCGI"
[debug] Found home "/home/typester/tmp/MyApp"
[debug] Loaded Config "/home/typester/tmp/MyApp/myapp.yml"
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class | Type |
+-----------------------------------------------------------------+----------+
| MyApp::Controller::Root | instance |
'-----------------------------------------------------------------+----------'
[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private | Class | Method |
+----------------------+--------------------------------------+--------------+
| /default | MyApp::Controller::Root | default |
| /end | MyApp::Controller::Root | end |
'----------------------+--------------------------------------+--------------'
[info] MyApp powered by Catalyst 5.7001
FastCGI: manager (pid 3003): initialized
FastCGI: server (pid 3004): initialized
FastCGI: manager (pid 3003): server (pid 3004) started
こんな感じで、CatalystのFastCGIプロセスをDebugモードでかつデーモンじゃなく起動して、組み込みのテストサーバー代わりにしたいのだけど、上記以降の出力は全部lighttpdのログのほうに吐き出されてしまうのでびみょい。
なんとかなんないかなぁと、田中さんに相談中。
Larryのフィギュア
おー、ingyとかaudreyとかのフィギュアもあわせてsubtech入りたいを再現したい。
Chained
Chainedアクションを使って、/ユーザー名/...
だとそのユーザーのエントリを表示。
/...
だと全員のエントリを表示するアプリケーションの例。
最後にはてなっぽく /ユーザー名/profile
もつけてある。
package MyApp::Controller::UserView;
use strict;
use warnings;
use base 'Catalyst::Controller';
sub user_detect :Chained('/') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $user) = @_;
$c->stash->{user} = $c->model('DBIC::User')->find({ username => $user })
or $c->detach('/default');
}
sub user_root :Chained('user_detect') :PathPart('') :Args(0) {
my ($self, $c) = @_;
$c->forward('/view/index');
}
sub user_tag :Chained('user_detect') :PathPart('tag') :Args(1) {
my ($self, $c, $tags) = @_;
$c->forward('/view/tag');
}
sub user_year :Chained('user_detect') :PathPart('') :Args(1) {
my ($self, $c, $year) = @_;
$c->forward('/view/year');
}
sub user_month :Chained('user_detect') :PathPart('') :Args(2) {
my ($self, $c, $year, $month) = @_;
$c->forward('/view/month');
}
sub user_day :Chained('user_detect') :PathPart('') :Args(3) {
my ($self, $c, $year, $month, $day) = @_;
$c->forward('/view/day');
}
sub user_permalink :Chained('user_detect') :PathPart('') :Args(4) {
my ($self, $c, $year, $month, $day, $id) = @_;
$c->forward('/view/permalink');
}
sub user_profile :Chained('user_detect') :PathPart('profile') :Args(0) {
my ($self, $c) = @_;
$c->stash->{template} = 'user/profile.tt';
}
1;
うーん、微妙w
:Chained('/') :PathPart('')
はあんまりやらないほうがよさげ。
Chainedアクションを覚えた
便利ねー。これで Plugin::Flavour の半分はいらなくなったから削ってシンプルにしようかと思う。
CaptureArgsやArgsをRegexで指定できたらもっとあついなぁ。
引数の数は同じだけど振り分けられる的な。
Text::Tags::Parser
いつも名前忘れるなぁ。