perlの最近のブログ記事
ウェブアプリを作っている。環境はlinux(FC6)+apache+mod_perl非常に時間がかかる処理や、ブラウザからの要求時点では完了できないような処理を、非同期実行するためのメッセージバスとしてActiveMQを使用している。
ウェブアプリおよびバックエンドの処理は主にperlで作成。ActiveMQとのやりとりにはNet::Stompモジュール。
現在は、単一のサーバで実行していて、localでメッセージを投げて受ける状態。STOMPの接続先としてlocalhostを指定していた。
そしたら、下記のようなメッセージとともにNet::Stomp->newがこける。
Error connecting to localhost:61613: 無効な引数です at /usr/lib/perl5/site_perl/5.8.8/Net/Stomp.pm line 19.なんでかなー、と思ったら、/etc/hostsに以下のように記述されていた。
::1 host localhost.localdomain localhostので、Net::Stompに指定する接続先を「127.0.0.1」に変えたらうまくいった。えらい悩んでしまった。。。
IPv6が有効になってる環境では要注意かも。
はてなRSSのキーワードウォッチがすごく便利で、いくつかのジャンルのネタ拾いをしているのだけど、「STOMP」って単語にスカパラその他音楽関係がどんどこヒットしてきて、ちょい困る(^^;
ひさしぶりにwebアプリを書くことになり、既存のフレームワークを利用することにした。
Rails周辺の喧騒はなんとなく気にしていて興味はあったのだけど、rubyを最後に触ったのが5年前で、今回はより慣れているperlでいくことに。
「まるごとperl」でフレームワークの特集記事があって、Catalyst・Sledge・Jiftyが紹介されていた。Jiftyのポニーの由来とDB上のスキーマありき「ではない」ところにすごく惹かれたけど、今回はあまり七転八倒する時間的猶予がなく、web上の日本語情報が多そうなCatalyst+mod_perlに決めた。
フレームワークというのはなんだかんだでフレームワーク自身の内部的な動きも含めて理解しないと、ホントに便利にはならないものだと再認識。
特にプラグインをパイプ的にチェーンするフレームワークでは。
フレームワーク固有というよりはutf8フラグ絡みなんだけど、文字化けとの格闘を越えてやっと便利だなぁと思えるようになってきた。
そうするとapacheのアクセスログにリモートユーザ(LogFormatでの%u指定)を記録するようにしていても「-(ハイフン)」で記録されてしまう。
Rails周辺の喧騒はなんとなく気にしていて興味はあったのだけど、rubyを最後に触ったのが5年前で、今回はより慣れているperlでいくことに。
「まるごとperl」でフレームワークの特集記事があって、Catalyst・Sledge・Jiftyが紹介されていた。Jiftyのポニーの由来とDB上のスキーマありき「ではない」ところにすごく惹かれたけど、今回はあまり七転八倒する時間的猶予がなく、web上の日本語情報が多そうなCatalyst+mod_perlに決めた。
フレームワークというのはなんだかんだでフレームワーク自身の内部的な動きも含めて理解しないと、ホントに便利にはならないものだと再認識。
特にプラグインをパイプ的にチェーンするフレームワークでは。
フレームワーク固有というよりはutf8フラグ絡みなんだけど、文字化けとの格闘を越えてやっと便利だなぁと思えるようになってきた。
apacheのアクセスログにユーザを記録する
認証といえばインフラのレイヤに任せる、という方式を好むのだけど、今回はアプリの都合もあってフレームワークとアプリで認証の面倒を見ることにした。そうするとapacheのアクセスログにリモートユーザ(LogFormatでの%u指定)を記録するようにしていても「-(ハイフン)」で記録されてしまう。
- 今回の環境は、apache 2.2.3、mod_perl 2.0.2、Catalyst 5.7006、perl 5.8.8、認証/セッションはAuthentication::CDBIとSession::FastMmapを使用。
- コンテキストオブジェクトから、Apache2::RequestRecを得る。
my $rr = $c->apache;
- あとは、認証ユーザを設定するだけ。Root.pmのauto内で設定している。
$rr->user( $c->req->{user} );
- ただし、テストサーバで実行中はコンテキストオブジェクトにapacheメソッドがないので、こんな感じにした。
$c->apache->user( $c->req->{user} ) if $c->can("apache") && $c->req->{user};
- staticなリソースについてはCatalystを経由せずapacheが直接serveするようにしているので相変わらず「-(ハイフン)」だけど。
