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のドメイン名の部分で切り替える必要はなく、空文字列になっています。

環境の判断

環境を判断する基準は以下のプライオリティーです。(記憶の範囲です。ですから、間違っているかも知れません。)

  1. artisanコマンドラインツールの--envオプション
  2. 環境変数
  3. 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使いの方はご注意ください。