CakePHPで本番と開発のファイルとファイル構成を同じにする
どの環境でもファイルを同じにしたい。
たとえば本番環境だからといってcore.phpファイルを別々にするとかをやめる。
デフォルトのCakePHPで開発環境と本番環境で共有できないのはcore.phpとdatabase.phpだろう。そのへんは
CakePHP core.phpの設定をbootstrap.phpに書く | Shin x blog
の方法が参考になります。
Railsと同じようにApacheの設定で環境変数を定義してやり、それにより各種設定を切り替えるという方法です。僕はこの方法をRailsっぽく応用しました。
Apacheの設定をかえる
本番環境でCAKE_ENVがproductionになるようにする($_SERVER['CAKE_ENV']で参照できる)
<VirtualHost *> DocumentRoot /var/www/www.example.com/htdocs #....省略.... ServerName www.example.com SetEnv CAKE_ENV production </VirtualHost>
必要なディレクトリとファイルをつくる
--app |-config |-core.php |-database.php |-bootstrap.php |-environment #<=これを作る | |-default.php #<=これを作る | |-production.php #<=これを作る
bootstrap.phpで設定を行う
<?php //環境の分岐 Configure::write('Config.environment',isset($_SERVER['CAKE_ENV']) ? $_SERVER['CAKE_ENV'] : "default"); //Config.environmentの値によって読み込むファイルを切り替える require_once("environment/".basename(Configure::read('Config.environment').".php"));
default.phpとかの中身
別にしたいものなら何でも。core.phpの内容を上書きしてくれるので、core.phpから同じ設定を消す必要はありません。
<?php Configure::write('debug', 2); Configure::write('Cache.check', false); Configure::write('Security.salt', 'xxxx');
データベースの切替
database.phpに新しい設定を作る
<?php class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'test', 'password' => 'oij8j99i', 'database' => 'example_app', 'encoding' => 'utf8', ); var $production = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'bababa', 'password' => 'eeee333eeee', 'database' => 'example_production', 'encoding' => 'utf8', ); } ?>
app_model.phpを変更
<?php class AppModel extends Model { function __construct($id = false, $table = null, $ds = null) { $this->useDbConfig = Configure::read('Config.environment'); parent::__construct($id, $table, $ds); } } ?>
まとめ
これで本番環境でもテスト環境でも同じファイルが共有できるようになった。
次回は実際にCapistranoを設定する