[cakephp]環境変数で本番環境と開発環境を設定する

1人で制作してると、localで制作して良ければ本番にアップしますが、複数人だとそうもいきません。
「localで制作 → テストサーバーでチェック → 本番」とかになったりします。
初期ファイルをFTPしたら、database.php、email.phpとか設定ごとに変わるものは、gitで管理しないという方法もありますが、間違ってアップしてもエラーを吐かないようにしたいですね。

参考:CAKE_ENVで開発環境と本番環境の切り替え | ひげろぐ

virtualhostに設定するので、VPSとかクラウドサーバーとかrootがあるサーバーじゃないと無理ですが、

httpd.conf

// 本番サーバー
<virtualhost *:80>
  ・
  ・
  SetEnv CAKE_ENV production
</virtualhost>
// テストサーバー
<virtualhost *:80>
  ・
  ・
  SetEnv CAKE_ENV development
</virtualhost>

bootstrap.php

if (isset($_SERVER['CAKE_ENV']) && $_SERVER['CAKE_ENV'] == 'production') {
  // 本番サーバー
  $cake_env = 'production';
  Configure::write('debug', 0);
} elseif (isset($_SERVER['CAKE_ENV']) && $_SERVER['CAKE_ENV'] == 'development') {
  // テストサーバー
  $cake_env = 'development';
  Configure::write('debug', 2);
} else {
  // ローカル
  $cake_env = 'default';
  Configure::write('debug', 2);
}
Configure::write('cake_env', $cake_env);

database.php

class DATABASE_CONFIG {
  // 本番環境
  public $production = array(
    ・
    ・
  );
  // テスト環境
  public $development = array(
    ・
    ・
  );
  // ローカル
  public $default = array(
    ・
    ・
  );
}

AppModel.php

function __construct($id = false, $table = null, $ds = null) {
  $cake_env = Configure::read('cake_env');
  if (empty($cake_env)) {
    $this->useDbConfig = 'default';
  } else {
    $this->useDbConfig = $cake_env;
  }
  parent::__construct($id, $table, $ds);
}

email.phpもdatabase.phpと同じようにそれぞれの環境で設定します。
送信するcontrollerで

$cake_env = Configure::read('cake_env');
$email = new CakeEmail($cake_env);

参考:[PHP]環境変数を設定して開発環境と本番環境を分岐する。 | WEBプログラム覚書
参考:[CakePHP][cron][さくら]うまくいかない原因が環境変数って・・・ | HappyQuality


「SetEnv」はcronからは取得できません。
cronも切り分けたい場合は、ホスト名を使うとか、apacheに依存しない、別の方法が必要です。

参考:Webプログラマ勉強中: PHPにて本番環境と開発環境の判別にはホスト名を使う

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)