Mojoliciousでconfigを分けたいっ!

configを分離

config/myapp_devel.conf
config/myapp_prod.conf

MyApp.pm

package MyApp;
use Mojo::Base 'Mojolicious';
use Path::Class;

sub startup {
  my $self = shift;
  my $config = $self->_config();
}

sub _config {
  $self = shift;
  my $home = new Path::Class::File(__FILE__);
  my $root = $home->dir->resolve->absolute->parent->parent();
  my $suffix = $self->mode eq 'production' ? '_prod' : '_devel';
  my $f = $root->stringify . '/myapp/config/myapp' . $suffix . '.conf';
  $self->plugin( 'Config', { 'file' => $f } );
}

Controller

これであとは、普通にコントローラーとかで環境ごとのconfigが使えるようになる

sub hoge {
  $self = shift;
  my $hoge = $self->config->{'hoge'};
}

productionでの起動

configは起動時のmodeで切り替え。
何も指定しなければdevelopmentなので、productionモードで起動したい場合はこんな感じで。

daemon script/myapp -m production

もしくは、環境変数に入れても。

MOJO_MODE=production daemon script/myapp