CakePHP3で環境を切り替え(development/production)

スポンサーリンク

今日もしつこく CakePHP 3 の話題です、ちょっと飽きてきましたけど。以前、CakePHP で production, development, staging などで、環境を切り替えてデータベース・設定のファイルを読み込む方法を書いた。

CakePHP3で環境毎(development/production)にデータベース・設定を切り替え | EasyRamble

それをちょっと修正したので追記的な記事です。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
PHP 5.5.19
CakePHP 3.1.1

$_SERVER[‘HTTP_HOST’] でスイッチはちょっとまずい

DBなどの設定ファイルを切り替えるのに、以前は config/bootstrap.php で $_SERVER[‘HTTP_HOST’] を見てスイッチするようにしていた。ここがちょっとまずい。

config/bootstrap.php

これだと、コンソール作業やマイグレーションの際に、$_SERVER[‘HTTP_HOST’] が取れないのでエラーが出てしまいます。

独自に設定した環境変数 CAKEPHP_ENV を使う改良版

まず development, production など各環境のマシン・サーバーで、~/.zshrc, ~/.bashrc などに環境変数として CAKEPHP_ENV を設定します。

これで env(‘CAKEPHP_ENV’) で環境が取得できるので、コンソール実行時やマイグレーションの際にも、development, production などの環境が分けられる。

【追記 2016/08/22】
Apache(ブラウザ)からも環境を取得するために、httpd.conf に設定を行う。development, production など各環境のマシン・サーバーで、Apache の設定ファイル httpd.conf 等に環境変数として CAKEPHP_ENV を設定します。

httpd.conf

development 環境であれば上のように追加。これで phpinfo の Apache Environment(_SERVER[“CAKEPHP_ENV”])に環境変数 CAKEPHP_ENV が追加されます。この値も env(‘CAKEPHP_ENV’) で取得できる。
【追記ここまで】

最後に、config/bootstrap.php を以下のとおり修正。

config/bootstrap.php

env(‘CAKEPHP_ENV’) を見て、読み込む設定ファイルをスイッチさせるようにしました。これで、ブラウザ実行時もコンソールからの実行でもエラーが出ずに済みます。

以上ですが、にしてもフレームワークのデフォルトで環境切り替えがサポートされていないのは、CakePHP に対してちょっと不満なポイントです。Rails のように、デフォルトで development, production, test の環境くらいをサポートしてくれたら、CakePHP はもっと使いやすくなりそう。

スポンサーリンク
私は Ruby on Rails の前は、PHP & CakePHP を使っていました(今も使いますけど)。PHP についてはオライリーの本を中心に軽く10冊以上は読み込みました。
 
スポンサーリンク

Leave Your Message!