Laravel 本來預設的 Environment Configuration 是透過 Domain Name 來區分,程式碼 bootstrap/start.php
如下
<?php $env = $app->detectEnvironment(array( 'local' => array('your-machine-name'), ));
我們可以根據上述程式碼產生不同的開發環境,像是 develop, production, staging… 等,根據不同的 Domain 給予不同的環境設定檔。但是根據使用 Domain Name 來區分各種不同的環境換產生兩種問題
- 如果想單一 Domain 跑多種環境?
- 多個 Domain 增加 Nginx 或 Apache 的設定檔
老實講用 Domain 來分類蠻不方便的,如果突然想要在同一個 Domain 使用不同的環境設定,又要改 Domain mapping。所以 Laravel 也不是強制要使用這方法,我們可以透過增加 environment.php
來決定目前專案跑哪一種環境設定,該程式碼只有一行
<?php return "production"; /* End of bootstrap/environment.php */
那當然我們也要將 detectEnvironment
改成
$env = $app->detectEnvironment(function() { // Defined in the server configuration if ( isset( $_SERVER['APP_ENVIRONMENT'] ) ) { return $_SERVER['APP_ENVIRONMENT']; // Look for ./environment.php } elseif ( file_exists( __DIR__ . '/environment.php' ) ) { return include __DIR__ . '/environment.php'; // set default configuration } else { return 'local'; } });
Apaceh 可以直接在設定檔內定義變數如下,Laravel 可以透過 $_SERVER['APP_ENVIRONMENT']
取環境變數。如果沒有設定 Apache 變數,則讀取 bootstrap/environment.php
,最後才會讀取預設值。
SetEnv APP_ENVIRONMENT development