2017-05-22 4 views
1

루멘 5.4, MyDql & 도커. 내 프로젝트에루멘은 요청하는 동안 시스템에서 env를 읽지 않습니다.

$ printenv 
DB_HOST=127.0.0.1 
DB_DATABASE=database 
etc 

.env 글로벌 env에서 변수를 다음 한도 존재하지만 서로 다른 값을 갖는다.

팅커 인 env('DB_HOST')을 입력하면 전역 환경의 값이 인쇄되지만 응용 프로그램이 실행될 때 지정된 .env 파일에서 가져옵니다. 나는 문제가 Laravel\Lumen\Application에 다음 함수 내에 존재 생각 :

/** 
* Load a configuration file into the application. 
* 
* @param string $name 
* @return void 
*/ 
public function configure($name) 
{ 
    if (isset($this->loadedConfigurations[$name])) { 
     return; 
    } 

    $this->loadedConfigurations[$name] = true; 

    $path = $this->getConfigurationPath($name); 

    if ($path) { 
     $this->make('config')->set($name, require $path); 
    } 
} 

어떻게 그 값을 대체하거나 그 조건을 방지 할 수 있도록 : isset($this->loadedConfigurations[$name])를?

+1

당신은'env()'를 참조하지 않고 대신'config()'파일을 참조하고 그곳에있는 전역 vs local env의 논리를 처리합니다. '.env()'파일을 직접 참조하지 말아야한다. – Ohgodwhy

+0

@Ohgodwhy 물론 네 말이 맞아.하지만이 상황에서는 그렇지 않아. Docker의 시스템'env 's를 사용하고 Docker의 환경에서 주어진 값으로 내 로컬'.env'에서 그 값을 덮어 쓰고 싶습니다. 경우는 위에서 언급 한 자동 로딩 구성을 피하는 방법입니다. – wujt

답변

0

나는 여전히 내 의견과 관련하여 답변이 동일하다고 생각합니다. 로컬 .env 변수가 아니라 도커 환경 변수를 사용하려면 config 디렉토리를 사용하십시오. 이 경우 database host을 타겟팅하려는 것으로 보입니다. 그럼 그렇게하자 : 당신의 config/database.php 파일에서

, 다음을 변경 :

'mysql' => [ 
    //... 
    'host' => getenv('DB_HOST') ?: env('DB_HOST', 'defaultvalue') 
] 

는 만 설정 파일을 통해 호스트에 대한 참조를 확인하십시오. 존재하는 경우

config("database.mysql.host"); 

당신은 그렇지 않으면 당신은 당신의 .env 파일에서 DB_HOST 선언을 얻을 것이다, 당신의 고정 표시기 컨테이너에서 ENV를 얻을 것이다.