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に依存しない、別の方法が必要です。
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)