foreman で Procfile でがんばろうとおもったのだけど、なんか妙に終了がおそいのが気にくわないのと、なんか外部 DSL 疲れ的な心境にいたり、最近 Proclet に foreman 的なことができる機能がはいったということもあって、Proclet で DSL でやっつけることにした。
以下のようなコードをかいて
package Proclet::Declare;
use strict;
use warnings;
use Proclet;
use parent qw/Exporter/;
our @EXPORT = qw/env service run/;
our %REGISTRY;
sub _proclet() {
return $REGISTRY{caller(1)} ||= Proclet->new(color => 1);
}
sub env {
my %env = @_;
while (my ($k, $v) = each %env) {
$ENV{$k} = $v;
}
}
sub service {
my ($tag, $code) = @_;
_proclet->service(
code => ref($code) eq 'CODE' ? $code : sub { exec($code); die $! },
tag => $tag,
);
}
sub run() {
_proclet->run;
}
1;
以下のようなブートストラップコードをかく。
use strict;
use warnings;
use Proclet::Declare;
env(
SLEDGE_CONFIG_NAME => 'development',
LM_COLOR => 1,
);
service('web', 'plackup -p 5963 app.psgi');
service('memcached', '/usr/local/bin/memcached -p 11211');
run;
と、いいかんじにうごくという寸法。
Proclet さんまじ便利やー。kazeburo++