@ziguzagu App::watcherで、watcher --dir . --signal HUP -- proclet だとどうかな
— masahiro nagano (@kazeburo) June 24, 2013
というのを教えてもらった!
前の記事でははしょったけど、redis、nginx なんかもうごいててまぁ再起動しても一瞬なんだけど、もったいない感があったので、
@ziguzagu plackupは-r、workerはwatcher使うとか細かく設定すると良いかもね。ちょっと面倒だけど
— masahiro nagano (@kazeburo) June 24, 2013
の通り、gearman worker は App::watcher で変更検知、plackup は -r とか -R で、というふうにしてみた。
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Proclet;
use FindBin ();
use Cwd ();
my $lib = Cwd::abs_path("$FindBin::Bin/../lib");
my $proclet = Proclet->new(color => 1);
$proclet->service(
tag => 'gearmand',
code => 'gearmand -p 7003 --debug 1',
);
$proclet->service(
tag => 'gearman-worker',
code => 'watcher --dir lib --signal HUP -- perl -Ilib script/gearman-worker --jobs Foo',
);
$proclet->service(
tag => 'api',
code => 'plackup -Ilib -p 3000 -R $lib -s Starlet --workers 2 etc/api.psgi',
);
$proclet->run;
すっきり。cpanfile には以下を入れておくと多分エコ。
on 'develop' => sub {
requires 'App::watcher';
if ($^O eq 'linux') {
requires 'Linux::Inotify2';
}
elsif ($^O eq 'darwin') {
requires 'Mac::FSEvents';
}
};
同じディレクトリ以下を複数のプロセスで watch してるんだけど、そのへんエコじゃないかもしれないけど。