riji server
(確認サーバー)apns-agent
lleval-bot.pl
pad-markdown.pl
ukigumo-server
gearman-starter.pl
script/
ディレクトリにスクリプトを配置すればいいだけplackup
相当のオプションとかを全部受け付けられるようにするとかやると大変アプリケーション用の引数解析を行なった後に、Plack::Runnerにお任せ。
#!/usr/bin/perl
use strict;
use warnings;
use Plack::Runner;
use APNS::Agent;
# 引数解析
my ($opt, $argv) = APNS::Agent->parse_options(@ARGV);
# psgiの作成
my $psgi_app = APNS::Agent->new($opt)->to_app;
my $runner = Plack::Runner->new;
# 先頭に無理矢理defaultポートを指定
$runner->parse_options('--port=4905', @$argv);
$runner->run($psgi_app);
@ARGV
を APNS::Agent
に必要な引数と残りの引数に分ける
my ($opt, $argv) = APNS::Agent->parse_options(@ARGV);
# 中身
sub parse_options {
my ($class, @argv) = @_;
my $p = Getopt::Long::Parser->new(
# pass_throughが必須
config => [qw/posix_default no_ignore_case auto_help pass_through bundling/]
);
$p->getoptionsfromarray(\@argv, \my %opt, qw/
certificate=s
private-key=s
disconnect-interval=i
sandbox!
debug-port=i
/) or Pod::Usage::pod2usage();
Pod::Usage::pod2usage() if !$opt{certificate} || !$opt{'private-key'};
Hash::Rename::hash_rename(\%opt, code => sub {tr/-/_/});
(\%opt, \@argv);
}
# psgiの作成
my $psgi_app = APNS::Agent->new($opt)->to_app;
my $runner = Plack::Runner->new;
# 先頭に無理矢理defaultポートを指定
$runner->parse_options('--port=4905', @$argv);
$runner->run($psgi_app);
http://yapcasia.org/2015/talk/show/5b1cd536-07ed-11e5-9e42-79c97d574c3a