Laravel 本來預設的 Environment Configuration 是透過 Domain Name 來區分,程式碼 bootstrap/start.php 如下
detectEnvironment(array(
'local' => array('your-machine-name'),
));我們可以根據上述程式碼產生不同的開發環境,像是 develop, production, staging… 等,根據不同的 Domain 給予不同的環境設定檔。但是根據使用 Domain Name 來區分各種不同的環境換產生兩種問題
- 如果想單一 Domain 跑多種環境?
- 多個 Domain 增加 Nginx 或 Apache 的設定檔
老實講用 Domain 來分類蠻不方便的,如果突然想要在同一個 Domain 使用不同的環境設定,又要改 Domain mapping。所以 Laravel 也不是強制要使用這方法,我們可以透過增加 environment.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
