天然パーマです。

プロジェクトに合わせて設定を変える起動スクリプトをProcletでつくる

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 コマンドでコンパイルしています。なんか適当に書いたコードですが、これで無駄なコードが減ってスッキリしましたね。ご参考までに。