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