- 更新日: 2016年2月5日
- PHP & CakePHP
CakePHP3で環境毎(development/production)にデータベース・設定を切り替え
CakePHP 3 で development, production, staging などの環境ごとに、データベース接続など設定情報を切り替える方法です。情報が見つかりにくくて、ちょっと試行錯誤しました。
— 環境 —
CakePHP 3.1.1
PHP 5.5.19
各環境ごとの設定ファイルを作成
まず、config 以下に environments ディレクトリを作成して、環境ごとの設定ファイルを作成します。
1 2 3 4 5 6 7 |
config | environments | | development.php | | production.php | | staging.php |
各々環境ごとの設定ファイルに config/app.default.php をコピー&ペーストして、中身を環境に合わせて書き換えます。デバッグ情報(’debug’ => true)やエラー情報(Error)、データベースの設定情報(Datasources)の箇所などは、環境ごとに異なる情報になるかと思います。
config/bootstrap.php で設定ファイルをロードする
公式ドキュメントの説明に、独自に追加した設定ファイルを読み込む方法が書いてあります。
1 2 3 4 5 6 |
use Cake\Core\Configure; use Cake\Core\Configure\Engine\PhpConfig; Configure::config('default', new PhpConfig()); Configure::load('app', 'default', false); Configure::load('other_config', 'default'); |
Loading Additional Configuration Files – Configuration | CakePHP Cookbook 3.x documentation
このように書くことで、config/other_config.php を設定ファイルとして読み込めるらしい。
上述の公式ドキュメントを参考に、development, production など環境ごとに読み込む設定ファイルを変更するために、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 ($_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; } |
これで、サーバーの HTTP_HOST の情報から、環境ごとに読み込む設定ファイルを変更することができました。
【追記 2016/02/05】
$_SERVER[‘HTTP_HOST’] で切り替える方法は、コンソール作業やマイグレーションでエラーが出てちょっとまずかったので、独自に設定した環境変数 CAKEPHP_ENV で切り替える方法に修正しました。それについての記事を書きましたので、以下リンクからご参照お願いします。
CakePHP3で環境を切り替え(development/production) | EasyRamble
【追記ここまで】
CakePHP 用の情報は、バージョン 2 と 3 の情報が錯綜しているのでなかなか探しにくい。また検索しても CakePHP 3 の情報は少なめなので、最初は公式ドキュメントを当たるの良さそうです。
今回の解決策は CakePHP3 の公式ドキュメントと、検索で見つけた CakePHP2 での解決策を混ぜてやった感じです。確信があるわけではないので、もっと良い方法があるかもしれません。フレームワーク側でデフォルトでサポートがありそうな機能ですけど、なにかスタンダードな方法はないのでしょうかね…。
- – 参考リンク –
- CakePHP3の使い方まとめ – Qiita
- [CakePHP] 環境に応じてデータベースの設定を変える | 端くれプログラマの備忘録
- CakePHPでproduction,staging,developmentを自動で切り替える
- CakePHPで開発環境毎に設定を変更する方法 – 【鋭利団体】PK-Brothers
- CakePHP 環境別設定ファイルの切り替えについて – Qiita
- 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でログイン後に元のページにリダイレクトさせる
- 初回公開日: 2015年11月19日
Leave Your Message!