Webアプリケーションの開発にあたって手元で開発用サーバーを起てるのはよくあるケースですが、同時に他のミドルウェアやCSS/JSの拡張メタ言語のコンパイラを立ち上げておきたい時があります。以下のようなprocletファイルをつくって foreman
やPerl製のProcletディストリビューションに同封の proclet
コマンドを立ち上げればそれが実現出来ます。
web: carton exec plackup -R templates,lib --no-default-middleware -p 5001 psgi/bokete_front_web.psgi
compass: cd assets/pc && compass watch sass/style.scss
上記のファイルを用意して…
$ proclet start -f procfile_for_pc
とすればOKです。
PSGIなWebアプリと comapss
コマンドを同時に動かしてますね。ただこれだと、1つのプロジェクトディレクトリにいくつかのアプリケーションが混在している時(うちの場合はよくあるんです)に、procletファイルが多数必要になって格好が悪い。そこで、 Proclet::Declare
を使って軽いスクリプトを書いてみたら、対象のアプリを指定するだけで 1ファイルにまとまってよい感じです。
#! /usr/bin/env perl
use strict;
use warnings;
use Proclet::Declare;
use Getopt::Long qw/:config posix_default no_ignore_case pass_through/;
use Pod::Usage qw/pod2usage/;
color(1);
my $map = {
pc => { psgi => 'bokete_front_web.psgi', assets => 'pc' },
sp => { psgi => 'bokete_front_sp.psgi', assets => 'sp' },
select => { psgi => 'bokete_front_select.psgi', assets => 'select' },
au => { psgi => 'bokete_front_au.psgi', assets => 'au' },
};
my %args;
GetOptions(
%args,
qw/
port|p=i
app|a=s
/
);
my $port = $args{port} || 5000;
my $mode = $args{app} or pod2usage(2);
my $config = $map->{$mode};
service( 'web', "carton exec plackup -R templates,lib --no-default-middleware -p $port psgi/$config->{psgi}" );
service( 'compass', "cd assets/$config->{assets} && compass watch sass/style.scss");
run;
__END__
=head1 DESCRIPTION
develop
=head1 SYNOPSIS
$ ./develop -a [pc|sp|select|au] --port 5001
=cut
PODにもあるようにスマートフォン版の(フロントエンドな)Webアプリを立ち上げて、かつソレ用のSASSファイルを compass
コマンドでコンパイルしています。なんか適当に書いたコードですが、これで無駄なコードが減ってスッキリしましたね。ご参考までに。