当時は MyApp::Plugin::ConfigLoader まで作るっていう発想がなかったんです

CatalystとConfig

http://perl-mongers.org/2008/08/catalystconfig.html

以前、バッチ用のスクリプトや他の 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 を使うのは諦めて

Catalystに依存しないconfigの読み込み

http://catalyst.g.hatena.ne.jp/dann/20080316/1205644297

dann さんに倣って MyApp::Utils と MyApp::ConfigLoader を作りました。
もう一度言いますけど、当時は MyApp::Plugin::ConfigLoader まで作るっていう発想がなかったんです。

で、今日上の perl-mongers の記事を読んでみると MyApp::Plugin::Config まで作ってるじゃないですか。Catalyst をロードしないように MyApp::ConfigLoader 的なものを作っていると思いますけど、これって開発、本番用の設定ファイルの切り替えとか、各々の設計の好みだったりポリシーだったりに左右される問題だと思うんですけど、みなさんどうしてます?

Comments:0

Comment Form

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 日々のこと

Home > 仕事のこと > 当時は MyApp::Plugin::ConfigLoader まで作るっていう発想がなかったんです

Search
Feeds

Return to page top