2014年10月24日金曜日

AWS Beanstalkで環境を環境変数にいれる

Beanstalkで環境を、PRODUCTION、STAGING、DEVELOPMENTとか分けてCakePHPで運用しています。
データベースとかBootstrapの中身を環境でわけてます。
if (Z_ENVIRONMENT=='PRODUCTION') {
    class DATABASE_CONFIG {
      var $default = array(
      );
    }
}elseif (Z_ENVIRONMENT=='STAGING') {
    class DATABASE_CONFIG {
      var $default = array(
      );
    }
} else {
    class DATABASE_CONFIG {
      var $default = array(
      );
    }
}

Beanstalkのコンソールで、$_SERVER['PARAM1']に環境をセットして、CoreファイルでそれをZ_ENVIRONMENTにセットしていて、普通にウェブで見るには問題ないのですがcronのとき、$_SERVER['PARAM1']がカラになってしまうので、さて困ったと。

調べていたら、
/opt/elasticbeanstalk/support/envvars.d/sysenv
このファイルにPARAM1なんかが書き込まれているようだったので、

if(isset($_SERVER['PARAM1'])){
  define('Z_ENVIRONMENT', $_SERVER['PARAM1']);
}else{
  $match = array();
  if(file_exists('/opt/elasticbeanstalk/support/envvars.d/sysenv')){
    $sysenv = file_get_contents('/opt/elasticbeanstalk/support/envvars.d/sysenv');
    $preg = preg_match('/PARAM1=\"(.+)\"/', $sysenv, $match);
  }elseif(file_exists('/opt/elasticbeanstalk/support/envvars')){
    $sysenv = file_get_contents('/opt/elasticbeanstalk/support/envvars');
    $preg = preg_match('/PARAM1=\"(.+)\"/', $sysenv, $match);
  }
  if (!empty($match[1])){
    define('Z_ENVIRONMENT', $match[1]);
  }else{
    define('Z_ENVIRONMENT', 'DEVELOPMENT');
  }
}


こうかな?