Mojoliciousのstartupの呼び出される回数は?
startupの呼ばれる回数を調べてみた。
package Chat::Web; use Mojo::Base 'Mojolicious'; # This method will run once at server start sub startup { my $self = shift; # Router my $r = $self->routes; my $config = $self->plugin( 'Config', { file => 'chat.conf' } ); $self->log->info("startup $$"); # Normal route to controller $r->websocket ('/echo')->to('chat#echo'); $r->get ('/')->to('chat#index'); } 1;
chat.conf
{ hypnotoad => { listen => ['http://*:8012'], workers => 3 } };
$hyponotod ./script/chat_web $ ps -ef UID PID PPID TTY STIME COMMAND d410302 5380 4128 ? 02:32:25 /usr/bin/perl d410302 4128 1 ? 02:32:24 /usr/bin/perl d410302 7888 7612 pty0 00:37:25 /usr/bin/bash d410302 3868 4128 ? 02:32:25 /usr/bin/perl d410302 3044 7888 pty0 02:33:44 /usr/bin/ps d410302 6696 4128 ? 02:32:25 /usr/bin/perl d410302 7612 1 ? 00:37:24 /usr/bin/mintty
ログはこんな感じ
[Sun Jun 22 02:32:24 2014] [info] startup 6404 [Sun Jun 22 02:32:24 2014] [info] Creating process id file "/home/d410302/chat_web/script/hypnotoad.pid". [Sun Jun 22 02:32:24 2014] [info] Starting zero downtime software upgrade. [Sun Jun 22 02:32:25 2014] [info] startup 4128 [Sun Jun 22 02:32:25 2014] [info] Listening at "http://*:8012". [Sun Jun 22 02:32:25 2014] [info] Manager 4128 started. [Sun Jun 22 02:32:25 2014] [info] Upgrade successful, stopping 4220. [Sun Jun 22 02:32:26 2014] [info] Creating process id file "/home/d410302/chat_web/script/hypnotoad.pid". [Sun Jun 22 02:32:57 2014] [info] Worker 3868 has no heartbeat, restarting.
3回よばれると思いきや、2回でした。ワーカープロセスの親(4128)と、もう一つ 6404も呼ばれています。この6404のプロセスIDはpsで確認できないので なんだろう。なんか気持ちが悪い。
morboに変えたら1回だけの呼び出し。 hyponotodの構成ファイルのワーカー数を1にしても、2回の呼び出しだった。
Hypnotoadのソースを読むと https://github.com/kraih/mojo/blob/master/lib/Mojo/Server/Hypnotoad.pm
なんとなく、構成ファイルの読み込みのために、1回プレ読み込みみないなこと をしているので2回呼び出しになっているっぽい。
1回だけ初期処理を行いたい場合はstart_upの中で $ENV{HYPNOTOAD_REV}を参照して、この値が3以上だと処理するみたいな 感じで、行けそうな気がするけど。。