perlによるwebアプリケーション作成手順 - Catalyst編 - その2

続きです。

perlによるwebアプリケーション作成手順 - Catalyst編 - その1 - 城好きwebプログラマーの生態メモ - 仕事編

前回はSampleというアプリを作成して試しに起動させるところまで出来ました。
今回はアプリで処理を書き始める前の初期設定を書いていきます。

ログの設定

Catalystの場合は

use Catalyst qw/-Debug/;

こうするとデバッグ用のログが出力されます。
デフォルトでこの設定になってるはずです。
しかし必ずしもデバッグ用のログが必要かといわれればそうではありません。
環境によって変えられるようにしておきます。

$ cd /path/to/Sample
$ vim lib/Sample.pm

ファイルを開くと以下の記述があると思います。

use Catalyst qw/
    -Debug
    ConfigLoader
    Static::Simple
/;

extends 'Catalyst';

__PACKAGE__->setup();

これを以下に書き換えます。

use Catalyst;
extends 'Catalyst';

our @PLUGINS = qw/
    ConfigLoader
    Static::Simple
/;
push @PLUGINS, '-Debug' if $ENV{SAMPLE_DEBUG};

__PACKAGE__->setup(@PLUGINS);

これで環境変数によってデバッグログを出力するかどうか変更できるようになりました。

$ export SAMPLE_DEBUG=1

これでデバッグオン

$ export SAMPLE_DEBUG=0

これでデバッグオフです。

デバッグオフで起動させてみてください。
先ほどとログが違ってると思います。

config設定

こちらもコンフィグファイルを環境によって変えられるようにしましょう。

まずデフォルトで作られてるコンフィグファイルはいらないので削除しちゃいます。

$ rm sample.conf

そして新しく環境別のコンフィグファイルを作ります。
ディレクトリ作成

$ mkdir config

共通

$ vim config/sample.pl
{
    name => "Sample",
}

本番用

$ vim config/sample_production.pl
{
    name => "Sample_production",
}

デバッグ用

$ vim config/sample_debug.pl
{
    name => "Sample_debug",
}

これは共通のファイルを各環境のファイルでオーバーライドする形になります。

$c->config->{name}

と呼び出した場合、デバッグの場合「Sample_debug」、本番では「Sample_production」、その他では「Sample」が取得できます。

次に、実際にコンフィグファイルを呼びだす部分を作成しましょう。

$ vim lib/Sample.pm

ファイルを開くと以下の記述があると思います。

__PACKAGE__->config(
    name => 'Sample',
    # Disable deprecated behavior needed by old applications
    disable_component_resolution_regex_fallback => 1,
    enable_catalyst_header => 1, # Send X-Catalyst header
);

これを以下に書き換えます。

__PACKAGE__->config('Plugin::ConfigLoader' => {
    file                => __PACKAGE__->path_to('config'),
    config_local_suffix => $ENV{SAMPLE_CONFIG_LOCAL_SUFFIX}
});

これで環境変数によってどのコンフィグファイルを呼び出すか変えられるようになりました。

$ export SAMPLE_CONFIG_LOCAL_SUFFIX=debug

これでデバッグ

$ export SAMPLE_CONFIG_LOCAL_SUFFIX=production

これで本番です。

上記で書いたデバッグログをオンにした状態で起動してみましょう。

[debug] Loaded Config "/path/to/Sample/config/sample.pl"
[debug] Loaded Config "/path/to/Sample/config/sample_debug.pl"

こういう記述があると思います。
これでどのコンフィグファイルが呼ばれているか確認できます。

起動スクリプト

環境変数がいっぱいでぐちゃぐちゃになってしまわないように起動スクリプトを作成しましょう。

まずデッバグ用です。

$ vim script/sample_debug.sh
#!/bin/sh

 # パス、ポートを変数に置き換え
APP_ROOT=/path/to/Sample
APP_PORT=8008
EXTLIB_ROOT=/path/to/extlib

 # モジュール呼び出し
eval $(perl -I${EXTLIB_ROOT}/lib/perl5 -Mlocal::lib=${EXTLIB_ROOT})
export PERL5LIB=${APP_ROOT}/lib:${PERL5LIB}

 # 環境変数整え
export SAMPLE_CONFIG_LOCAL_SUFFIX=debug
export SAMPLE_DEBUG=1

cd ${APP_ROOT}

 # 起動
exec \
${EXTLIB_ROOT}/bin/start_server --port ${APP_PORT} -- \
${EXTLIB_ROOT}/bin/plackup \
-s Starlet \
-E production \
--max-workers=1 \
--max-reqs-per-child=50 \
-a ${APP_ROOT}/sample.psgi

次に本番用です。

$ vim script/sample_production.sh
#!/bin/sh

 # パス、ポートを変数に置き換え
APP_ROOT=/var/www/sample/Sample
APP_PORT=8100
EXTLIB_ROOT=/var/www/sample/extlib

 # モジュール呼び出し
eval $(perl -I${EXTLIB_ROOT}/lib/perl5 -Mlocal::lib=${EXTLIB_ROOT})
export PERL5LIB=${APP_ROOT}/lib:${PERL5LIB}

 # 環境変数整え
export SAMPLE_CONFIG_LOCAL_SUFFIX=production
export SAMPLE_DEBUG=0

cd ${APP_ROOT}

 # 起動(ワーカ数は、スペック、付加、アクセス数などをもとに算出)
exec \
${EXTLIB_ROOT}/bin/start_server --port ${APP_PORT} -- \
${EXTLIB_ROOT}/bin/plackup \
-s Starlet \
-E production \
--max-workers=3 \
--max-reqs-per-child=100 \
-a ${APP_ROOT}/sample.psgi

起動スクリプトができたので実行してみます。

$ chmod +x script/sample_debug.sh script/sample_production.sh
$ script/sample_debug.sh
$ script/sample_production.sh

本番の方はエラーでましたか?
あたりまえです。本番のパスの先にはなにもないんですから。


とりあえずこれで初期設定は終了です。
Model、Controllerを作成する下地はできました。
ドンドン開発していきましょう。

次は作成したアプリを永続化してwebサーバーにのせるのですが、これは次回にでも。