- 更新日: 2016年8月22日
- PHP & CakePHP
CakePHP3で環境を切り替え(development/production)
今日もしつこく CakePHP 3 の話題です、ちょっと飽きてきましたけど。以前、CakePHP で production, development, staging などで、環境を切り替えてデータベース・設定のファイルを読み込む方法を書いた。
CakePHP3で環境毎(development/production)にデータベース・設定を切り替え | EasyRamble
それをちょっと修正したので追記的な記事です。
— 環境 —
PHP 5.5.19
CakePHP 3.1.1
$_SERVER[‘HTTP_HOST’] でスイッチはちょっとまずい
DBなどの設定ファイルを切り替えるのに、以前は config/bootstrap.php で $_SERVER[‘HTTP_HOST’] を見てスイッチするようにしていた。ここがちょっとまずい。
config/bootstrap.php
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Configure::config('default', new PhpConfig()); Configure::load('app', 'default', false); switch ($_SERVER['HTTP_HOST']) { case 'localhost:8765': Configure::load('environments/development', 'default'); break; case 'staging.example.com': Configure::load('environments/staging', 'default'); break; case 'production.example.com': Configure::load('environments/production', 'default'); break; } |
これだと、コンソール作業やマイグレーションの際に、$_SERVER[‘HTTP_HOST’] が取れないのでエラーが出てしまいます。
独自に設定した環境変数 CAKEPHP_ENV を使う改良版
まず development, production など各環境のマシン・サーバーで、~/.zshrc, ~/.bashrc などに環境変数として CAKEPHP_ENV を設定します。
1 2 3 |
export CAKEPHP_ENV=development |
これで env(‘CAKEPHP_ENV’) で環境が取得できるので、コンソール実行時やマイグレーションの際にも、development, production などの環境が分けられる。
【追記 2016/08/22】
Apache(ブラウザ)からも環境を取得するために、httpd.conf に設定を行う。development, production など各環境のマシン・サーバーで、Apache の設定ファイル httpd.conf 等に環境変数として CAKEPHP_ENV を設定します。
httpd.conf
1 2 3 |
SetEnv CAKEPHP_ENV development |
development 環境であれば上のように追加。これで phpinfo の Apache Environment(_SERVER[“CAKEPHP_ENV”])に環境変数 CAKEPHP_ENV が追加されます。この値も env(‘CAKEPHP_ENV’) で取得できる。
【追記ここまで】
最後に、config/bootstrap.php を以下のとおり修正。
config/bootstrap.php
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Configure::config('default', new PhpConfig()); Configure::load('app', 'default', false); switch ( env('CAKEPHP_ENV') ) { case 'development': Configure::load('environments/development', 'default'); break; case 'staging': Configure::load('environments/staging', 'default'); break; case 'production': Configure::load('environments/production', 'default'); break; } |
env(‘CAKEPHP_ENV’) を見て、読み込む設定ファイルをスイッチさせるようにしました。これで、ブラウザ実行時もコンソールからの実行でもエラーが出ずに済みます。
以上ですが、にしてもフレームワークのデフォルトで環境切り替えがサポートされていないのは、CakePHP に対してちょっと不満なポイントです。Rails のように、デフォルトで development, production, test の環境くらいをサポートしてくれたら、CakePHP はもっと使いやすくなりそう。
- – 参考リンク –
- CakePHP3 で開発環境準備、改訂版 – Qiita
- CakePHP3をHerokuで動かす設定 – Qiita
- ヾ(o゚ω゚o)ノ゙CakePHPで学ぶ継続的インテグレーションの勉強メモ#4.3.4〜4.3.5 – Qiita
- CakePHP env()で環境判定してシェル実行 – 130単位
- CAKE_ENVで開発環境と本番環境の切り替え | ひげろぐ
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
- 初回公開日: 2016年2月5日
Leave Your Message!