テスト環境と本番環境の判定
開発環境:CakePHP2.5.1
基本的な情報はbootstrap.phpにまとめることが多いですが、テスト環境と本番環境の内容をそれぞれ別々に管理するのは大変です。
ファイルを一つにして、プログラムで環境を振り分ける方法を紹介します。
サーバー権限ありの場合
Apacheの設定権限がある場合は、テスト環境のhttpd.confに次のように設定します。
SetEnv DEV_ENV dev
bootstrap.php側では上記で設定した情報でテスト環境か本番環境か判別することができます。
<?php // テスト環境設定 if (env('DEV_ENV') == 'dev') { Configure::write('ENV', 'test'); // 本番環境設定 } else { Configure::write('ENV', 'default'); } ?>
サーバー権限なしの場合
レンタルサーバーなどで、サーバーの権限がない場合、かなり強引ですが、次のように設定することで振り分けすることができます。
<?php $production = false; $argv = env('argv'); // WEBからのアクセス if (empty($argv)) { if (env('HTTP_HOST') == 'localhost') { $production = true; } // コマンドラインからのアクセス } else { if ($argv[env('argc')-1] == '/path/to/cakephp/app') { $production = true; } } // 本番環境設定 if ($production) { Configure::write('ENV', 'default'); // テスト環境設定 } else { Configure::write('ENV', 'test'); } ?>
通常のWEBからのアクセスはもちろん、SHELL実行時にも対応できます。
DBの切り替え
データベースも本番用とテスト用とで自動切り替えをさせます。
先ほどのbootstrap.phpで設定したENVを使って判別させます。
<?php public function __construct($id = false, $table = null, $ds = null) { $this->useDbConfig = Configure::read('ENV'); parent::__construct($id, $table, $ds); } ?>
本番環境でもdebug=2にする方法
テスト環境のみdebug情報を表示させるには、上記の分岐処理を使えばよいのですが、テスト環境では再現されず、どうしても本番で確認したい場合があります。
そんな時は自身のIPからのアクセスの時のみdebug情報を表示するという方法があります。
app/Config/core.php
<?php Configure::write('debug', 0); if ($_SERVER['REMOTE_ADDR'] == 'xxx.xxx.xxx.xxx') { Configure::write('debug', 2); }
xxx.xxx.xxx.xxxの部分にご自身のIPアドレスを指定すれば、その時だけdebug=2の表示にすることができます。