Laravel3の動作環境モード
タグ: Laravel3
Laravelは動作環境モードを判断します。
動作環境(モード)とは、ドメイン名や環境変数により、設定ファイルを切替えることです。通常、設定ファイルはapplication/config
フォルダー下のものが使用されます。
デフォルトでは、local
が用意されています。これはpaths.php内で定義されており、以下のような設定になっています。
$environments = array( 'local' => array('http://localhost*', '*.dev'), );
http://localhost
で始まるURLか、ドメイン名の最後の部分が.dev
である場合、local
環境とLaravelに判断されます。
local
環境では、application/config/local
フォルダーの下の設定ファイルの内容が、優先に使用されます。これにより、DBを切り替えたりするわけです。
Laravelのオリジナル配布zipを解凍しても、test
フォルダーはありません。使用する場合、自分で作成します。私が配布している開発ベース32ではtest、local、productionの3つを作成し、paths.phpも予めサンプルとして設定してあります。
もちろん、定義に自由に付け加え、自分だけの環境を作成することも可能です。例えば実機環境のproduction
とシステムテスト環境のsystemtest
、単体テスト用のtest
を付け加えてみましょう。
$environments = array( 'local' => array('http://localhost*', '*.dev'), 'production' => array('*.com', '*.jp', '*.info'), 'systemtest' => array('*.test'), 'test' => '', );
単体テストはWebからアクセスされるのではなく、ローカル環境でPHPUnitなどのツールにより、実行される環境を想定しています。ですからURLのドメイン名の部分で切り替える必要はなく、空文字列になっています。
環境の判断
環境を判断する基準は以下のプライオリティーです。(記憶の範囲です。ですから、間違っているかも知れません。)
- artisanコマンドラインツールの--envオプション
- 環境変数
- paths.phpで設定したURLによる判断
artisanコマンドラインツールのオプション
コマンドラインでの実行は呼び出しのURLがないため、2つの方法で環境を切り替えられるようになっています。
一つはダイレクトにオプションで切り替える方法です。例えばtest
環境で実行するならば:
php artisan コマンド --env=test
Laravelが提供するコマンドの全部が、環境の切り替えに対応していないことに注意してください。例えば、key:generateでアプリケーションキーを自動生成できますが、対象のファイルはalliction/config
下のapplication.phpファイルであり、環境を切り替えてもそのフォルダー下のapplication.phpファイルの内容を書き換えてくれません。
環境変数のオプション
環境変数LARAVEL_ENV
を設定すると、それが環境変数として使用されます。
シェルで定義:
export LARAVEL_ENV=test
.htaccessで定義:
SetEnv LARAVEL_ENV test
phpunit.xml内で定義:
<php> <env name="LARAVEL_ENV" value="test" /> </php>
色々な方法で定義できます。そのため、もし思ったように環境の切り替えが行われなかった場合は、上記の項目をチェックしてみてください。
ちなみに、Laravelによって判断された環境はグローバル変数のenvironment
として参照できます。
注意
フォーラムにMac使いの方から、開発環境だと遅いという投稿が時々あります。これは、Laravelのせいではなく、開発時のドメインに.local
をつけるため、それがOS内で遅延を引き起こしているそうです。Mac使いの方はご注意ください。