March 2010 posts

Mar 29, 2010

% plackup -s Starman app.psgi

% starman app.psgi

は、機能的には全く同じ。なんだけど、plackup 使ったほうは ps コマンドでプロセスみるとコマンドラインから渡したパラメーターが見えなくなる。たとえば、worker の数調整して --daemonize したとする。

% plackup -s Starman --workers 2 --daemonize app.psgi
% ps x | grep starman
18801   ??  Ss     0:00.01 starman master
18803   ??  S      0:00.00 starman worker
18804   ??  S      0:00.00 starman worker

こんな表示。一方 starman コマンド使ったほう。

% starman --workers 2 --daemonize app.psgi
% ps x | grep starman
18835   ??  Ss     0:00.01 starman master --workers 2 --daemonize app.psgi
18837   ??  S      0:00.00 starman worker --workers 2 --daemonize app.psgi
18838   ??  S      0:00.00 starman worker --workers 2 --daemonize app.psgi

引数見えてる。

1つのホストで複数のアプリを plackup 経由で動かしていて、さてアプリ更新しよ、HUP だ、ってときに

% ps x | grep starman

したら、いっぱい出てきて焦った...。

それぞれのアプリでもちろん listen してる port も違ったけど、--pid で pid ファイル作っていたので、そっちから、kill して難を逃れた...。

% kill -HUP $(cat hello.pid)

きょうびのイケてる人達は daemontools 使って、plackup なり starman なりなんなり動かしてるようなので、たぶん問題ないんだろうけど( daemontools まだ使った事ないからよくわからん...>< )、コマンド用意されている PSGI なサーバーはとりあえずそれを使おうと思った。

ていうかなんで ps がああなるかわかっていないのはダメ男な気がする...。アウチ。

Mar 09, 2010

http://gist.github.com/326535

これをみてちょっとビビった(まったく本筋とは関係ないところで)。Getopt::Long::GetOptions の第1引数に HashRef 渡して、続いてオプションリストを配列で渡してる...。なんですかその使い方...。

まじで?!と思って試してみた。

#!/usr/bin/env perl
use strict;
use warnings;
use Getopt::Long;

GetOptions(
    \my %opt,
    qw( foo=s bar=i baz ),
);                                                                                                                                                         
$opt{foo} ||= '';
$opt{bar} ||= 0;
$opt{baz} ||= 0;

print $opt{foo}, "\n";
print $opt{bar}, "\n";
print $opt{baz} ? 'ture' : 'false', "\n";

テスト。

% perl getoptions.pl --foo test --bar 123
test
123
false

おぉお。こんな指定できたのかぁ、GetOptions。