- 2008年8月15日 23:29
- 仕事のこと
以前、バッチ用のスクリプトや他の Catalyst アプリから設定ファイルを読み込むために Config::Multi を使って Catalyst 自体をロードしない MyApp::ConfigLoader を作ろうとしました。
Re:Catalystアプリオレオレポリシーでも紹介した通り Catalyst アプリの設定ファイルは以下のような構成になっています。
MyApp/
+ etc/
+ conf/
myapp.yml ## 開発、本番環境の共通設定
myapp_local.yml ## 開発環境の設定
myapp_service.yml ## 本番環境の設定
+ httpd/
app.myapp.conf ## 本番環境のバックエンド用 modperl
startup.pl ## 言わずと知れた startup.pl
www.myapp.conf ## 本番環境のフロントの apache
www.myapp_local.conf ## 開発環境のフロントの apache
+ validation
profile.yml ## Catalyst::Plugin::FormValidator::Simple::Auto
開発、本番環境で同じものは myapp.yml に書いて、開発、本番環境で違うものは myapp_local.yml, myapp_service.yml でそれぞれ上書きします。myapp_local.yml と myapp_service.yml の切り替えは Catalyst::Plugin::ConfigLoader.pm が
・$ENV{CATALYST_CONFIG_LOCAL_SUFFIX}
・$ENV{MYAPP_CONFIG_LOCAL_SUFFIX}
・$c->config->{config_local_suffix}
・local
の順で行いますよね。なので、開発環境では $ENV{MYAPP_CONFIG_LOCAL_SUFFIX} には何も設定せずに myapp_local.yml を読み込ませるようにして、本番環境では $ENV{MYAPP_CONFIG_LOCAL_SUFFIX} に service を設定して myapp_service.yml を読み込ませています。
さて、Config::Multi を使って myapp_local.yml と myapp_service.yml の切り替えは $ENV{CONFIG_MULTI_MYAPP} を使えばできるようです。つまり、開発環境では $ENV{CONFIG_MULTI_MYAPP} になにも設定せず、本番環境では ${CONFIG_MULTI_MYAPP} に service を設定するということです。
MyApp::ConfigLoader を作ろうと思った当時は MyApp::Plugin::ConfigLoader まで作ろうという発想はなかったんですね。要するに、MyApp 自体は Catalyst::Plugin::ConfigLoader を使って、MyApp の バッチ用スクリプトや daemontools のデーモン、他の Catalyst アプリからは MyApp::ConfigLoader を使うという発想です。
それで勝手に「う~ん、同じ意味で別の環境変数を設定しないといけないのかぁ・・・」ってなったわけですね。
そうなると、本番環境の crontab にも $ENV{CONFIG_MULTI_MYAPP} を設定しないといけないし、daemontools の setenv 用(/service/myapp/env/CONFIG_MULTI_MYAPP)にも設定しないといけないわけですね。
それは面倒だ、と言うか絶対忘れる。だって、俺、さわだぜ。それに、さわだもん。
で、どうしたかと言うと、Config::Multi を使うのは諦めて
dann さんに倣って MyApp::Utils と MyApp::ConfigLoader を作りました。
もう一度言いますけど、当時は MyApp::Plugin::ConfigLoader まで作るっていう発想がなかったんです。
で、今日上の perl-mongers の記事を読んでみると MyApp::Plugin::Config まで作ってるじゃないですか。Catalyst をロードしないように MyApp::ConfigLoader 的なものを作っていると思いますけど、これって開発、本番用の設定ファイルの切り替えとか、各々の設計の好みだったりポリシーだったりに左右される問題だと思うんですけど、みなさんどうしてます?
- Newer: 結婚したものの
- Older: 8月12日の音楽のこと
Comments:0
Trackbacks:0
- TrackBack URL for this entry
- http://hibinokoto.jp/mt/mt-tb.cgi/290
- Listed below are links to weblogs that reference
- 当時は MyApp::Plugin::ConfigLoader まで作るっていう発想がなかったんです from 日々のこと