追記
versionとversionsが抜けていたので追加しました。
plenvのzsh補完書いた
perlbrewでもrbenvみたいに.perl-versionとかサポートしないかなーって思っていたらtokuhiromさんがplenvというrbenvインスパイアなツールを作っていた (http://blog.64p.org/entry/2013/01/21/134639) ので早速インストールしてみた。
zshで補完できる出来るように補完スクリプト書いたので公開しておきます。
plenv exec|which で補完するのは.plenv/shims以下の実行権限のあるファイルだけにしているけどこれで合ってるのかな?
Plack::Middleware::InteractiveDebuggerがすごい
plackup -e 'enable "InteractiveDebugger"' -a app.psgi で使える。
stacktraceを差し替えるモジュールなんだけど、stacktrace中で変数のdumpとかできる
StackTrace (most recent call first) File "local/lib/perl5/Plack/Middleware/InteractiveDebugger.pm", line 108, in Plack::Middleware::InteractiveDebugger::__ANON__ $self->app->($env); [console ready] perl> use Data::Dumper perl> Dumper $env $VAR1 = { 'psgi.multiprocess' => '', 'SCRIPT_NAME' => '', 'SERVER_NAME' => 0, 'HTTP_ACCEPT_ENCODING' => 'gzip,deflate,sdch', 'HTTP_CONNECTION' => 'keep-alive', 'PATH_INFO' => '/die', -- snip --
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
基本的にはWeb+DB Press Vol70に書いているものの補足
Profile
- nginx
* upstream response time
- -d:NYTProf
- SIG{ALERM} でスナップショット取る
- CloudForecast
- GrowthForecast
- ビジネス指標の取得
Test/CI
- Mockオブジェクトでやってる
- CI は Ukigumo::Server
- コードレビューは自分でメンテできるかどうかが基準
minicpanを工夫してみた
外出時にcpanモジュール入れるのにminicpanを使っていますが、いちいちminicpanを起動して、オプション指定して、使い終わったら落とすという流れがめんどくさかったので、一連の流れをコマンドにしてみた。
(minicpan用のhttpdを常時起動しておいて、PERL_CPANM_OPTを指定しておけばいいだけですけど)
minicpanの保存先を予め決めておいて
minicpan -l ~/perl5/minicpan -r http://mirror/
こんな感じでcpanm_minicpanとして作成した。
#!/usr/bin/env perl use strict; use warnings; use Plack::Builder; use Plack::Middleware::Static; use Plack::Runner; use Test::TCP; my $server = Test::TCP->new ( code => sub { my $port = shift; my $app = builder { enable "Plack::Middleware::Static", path => qr{^/}, root => $ENV{HOME} . '/perl5/minicpan'; }; my @args = ("--port=$port"); unless ( $ENV{DEBUG} ) { push @args, '--access-log=/dev/null'; open STDERR, '>', '/dev/null' or die $!; open STDOUT, '>', '/dev/null' or die $!; } my $runner = Plack::Runner->new; $runner->parse_options(@args); $runner->run($app); }, ); printf STDERR "Start minicpan server: 0.0.0.0:%s (pid: %d)\n\n", $server->port, $server->pid; my $port = $server->port; system 'cpanm', '--mirror-only', "--mirror=http://localhost:$port/", @ARGV; printf STDERR "\nStopping minicpan server: 0.0.0.0:%s (pid: %d)", $server->port, $server->pid; undef $server;
zsh functionの_cpanmの補完対象に追加しておけば、補完も効く。