Cuitter - Yet Another CUI-Based Twitter client
よろしくお願いします。
2009-11-22
2009-11-19
[Perl]MojoをMouseでextendsしてみる
手始めに、MojoでMyAppをgenerateする。ここはMojo::Manual::GettingStartedに書いてあるのと同じ。
次に、MojoをMouseでextendsしたHamuChanというモジュールを用意する。
lib/MyApp.pmを、HamuChanを利用するように変更する。
デーモンを起動。
ブラウザでアクセスすると、カスタマイズした箇所を表示する。
http://localhost:3000/aaaa
ちゃんとactionが加わっている。パス指定が無い場合もHamuChanが取り回すようになっているので、
http://localhost:3000/
のようになる。
※Mouseって、最初からMooseX::NonMoose見たいな事が出来るんですね。
~/script/mojo$ mojo generate app MyApp
次に、MojoをMouseでextendsしたHamuChanというモジュールを用意する。
~/script/mojo/my_app$ cat lib/HamuChan.pm
package HamuChan;
use vars qw( $VERSION );
$VERSION = 0.001001;
use Mouse;
extends 'Mojo';
use Data::Dumper;
has action => ( is => 'rw', isa => 'Str' );
sub handler {
my ($self, $tx) = @_;
$self->action( 'default' );
$self->action( $tx->req->url->path->parts->[0] ) if defined $tx->req->url->path->parts->[0];
$tx->res->headers->header( 'x-powered-by', join( '/', __PACKAGE__, $VERSION ) );
}
no Mouse;
1;
__END__
lib/MyApp.pmを、HamuChanを利用するように変更する。
~/script/mojo/my_app$ cat lib/MyApp.pm
package MyApp;
use Mouse;
extends 'HamuChan';
use Data::Dumper;
after handler => sub {
my ($self, $tx) = @_;
# Hello world!
$tx->res->headers->content_type('text/plain');
$tx->res->body(
Dumper( [
$self->action,
$tx->res->headers->header( 'x-powered-by' )
] )
);
};
no Mouse;
1;
__END__
デーモンを起動。
~/script/mojo/my_app$ ./script/my_app daemon
Server available at http://127.0.0.1:3000.
ブラウザでアクセスすると、カスタマイズした箇所を表示する。
http://localhost:3000/aaaa
$VAR1 = [
'aaaa',
[
'HamuChan/0.001001'
]
];
ちゃんとactionが加わっている。パス指定が無い場合もHamuChanが取り回すようになっているので、
http://localhost:3000/
$VAR1 = [
'default',
[
'HamuChan/0.001001'
]
];
のようになる。
※Mouseって、最初からMooseX::NonMoose見たいな事が出来るんですね。
2009-11-18
[Linux]transmit timed out
オイラが管理するサーバが夜中に突然、PINGすら通らなくなった。
/var/log/mesaagesを見ると、
なんていう血文字が。こいつを頼りに調べると、先人の知恵やミラクルな解説に助けられた。
どうも、ネットワークの負荷が高い状況下において、TCP Segmentation
Offload(=TSO)が有効になっている場合、一部のハードウェアでネットワーク処理性能が低下するようだ。
そんな時には、TSOをオフにすると良いんだそうで。
2009-11-20 追記
TSOの有効状況を確認するには、下記のようにする。
/var/log/mesaagesを見ると、
NETDEV WATCHDOG: eth0: transmit timed out
なんていう血文字が。こいつを頼りに調べると、先人の知恵やミラクルな解説に助けられた。
どうも、ネットワークの負荷が高い状況下において、TCP Segmentation
Offload(=TSO)が有効になっている場合、一部のハードウェアでネットワーク処理性能が低下するようだ。
そんな時には、TSOをオフにすると良いんだそうで。
# /sbin/ethtool -K eth0 tso off
2009-11-20 追記
TSOの有効状況を確認するには、下記のようにする。
# ethtool -k eth0
Offload parameters for eth0:
Cannot get device udp large send offload settings: Operation not supported
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on
udp fragmentation offload: off
generic segmentation offload: off
2009-11-14
登録:
投稿 (Atom)
