tokuhirom's Blog

kazeburo さんの Proclet をもちいた劣化 foreman の実装

Proclet をつかって foreman っぽいのを適当につくってみた。

use strict;
use warnings;
use Proclet;
use autodie;

open my $fh, '<', 'Procfile';

my $proclet = Proclet->new();
while (my $line = <$fh>) {
    if (my ($name, $command) = ($line =~ /^([^:]+)\s*:\s*(.+)/)) {
        $proclet->service(
            code => sub {
                print "Invoke $name\n";
                exec($command);
            },
        );
    }
}
$proclet->run();

STDOUT にタグつけたりはしてないけど、とりあえず起動はできる。STDOUT にタグつけるのは pipe で処理かまさないとだめなのでちと面倒。
開発環境とかで gem をセットアップするのがめんどいときとかにはこんなんでごまかしてもまあよさそう。

Procfile は以下のようなものでためした。

memd: memcached -v -p 11211
plack: plackup -p 9022 -e 'sub { [200, [], ["OK"]] }'