参考にさせて頂いたページ
CakePHPでproduction,staging,developmentを自動で切り替える
CakePHPのデータベースを開発環境と本番環境で切り分ける方法 » INSPIRE TECH
ServerNameを取得する方法
cakephpでは、以下のように書くと取得できる。
env('SERVER_NAME')
app/Config/const.phpを作成する
CakePHPでproduction,staging,developmentを自動で切り替える
にならって進めていきます。
例として以下の通り。
<?php // 環境判定用の定数 define('PRODUCTION_SERVER_NAME', 'production.hoge.com'); define('STAGING_SERVER_NAME', 'staging.hoge.com'); define('DEVELOPMENT_SERVER_NAME', 'development.hoge.com');
参考ページに倣ってデータベース接続設定をしてみる
- database.phpの上部でrequire_onceして、const.phpを読み込む
- $default以外にも任意の変数名で、例えば$productionとか$stagingとかでデータベースの接続設定を記述する
- database.phpの下部にif文を記述して、条件次第で$this->defaultの値を上書きする
database.phpの記述内容は例として以下の通り。
<?php //定数を読み込み require_once(APP.'Config'.DS.'const.php'); //接続するDBを動的に設定 class DATABASE_CONFIG { //$default public $default = array( //接続の為の設定はご自身の環境に置き換えてください ); //本番用DB接続設定 public $production = array( //接続の為の設定はご自身の環境に置き換えてください ); //ステージング用DB接続設定 public $staging = array( //接続の為の設定はご自身の環境に置き換えてください ); //開発用DB接続設定 public $development = array( //接続の為の設定はご自身の環境に置き換えてください ); public function __construct() { if (env('SERVER_NAME') == PRODUCTION_SERVER_NAME) { $this->default = $this->production; } elseif(env('SERVER_NAME') == STAGING_SERVER_NAME) { $this->default = $this->staging; } elseif(env('SERVER_NAME') == DEVELOPMENT_SERVER_NAME) { $this->default = $this->development; } } }
core.phpのデバッグモードも設定してみる
まず、core.phpの上部で以下のような感じにrequire_onceする。
require_once(APP.'Config'.DS.'const.php');
検索すると、以下のような感じになっているところがあるので、if文で0などに切り替える。
Configure::write('debug', 2);
例として以下の通り。
if (env('SERVER_NAME') == PRODUCTION_SERVER_NAME) { //本番環境は0 Configure::write('debug', 0); } else { //本番環境以外は2 Configure::write('debug', 2); }