2014-03-27 3 views
0

내 database.php에 대한 로컬 개발 환경 구성을 원합니다. 내 애플 리케이션에 새 구성 디렉터를 만들고 database.php 파일을 복사했습니다. 나는 MongoDB를 사용하고 생산에, 나는 여러 서버에 복제 세트를 사용하고 있지만, 로컬, 난 그냥 하나의 서버를 실행하는거야, 그래서 생산을위한 내 접속 정보는 더 많은 옵션이 있습니다캐스케이드가 아닌 환경 특정 설정을 대체하는 방법

제작 :

를 지역
... 
'connections' => array(

    'mongodb' => array(
     'driver' => 'mongodb', 
     'host'  => array('mongoDBA', 'mongoDBB'), 
     'port'  => 27017, 
     'username' => 'myUserName', 
     'password' => 'myPassword', 
     'database' => 'theDatabase', 
     'options' => array('replicaSet' => 'myReplicaSet') 
    ) 
), 

: 내 로컬 환경 설정로드, 그것은 "연결"배열을 병합

... 
'connections' => array(

    'mongodb' => array(
     'driver' => 'mongodb', 
     'host'  => 'localhost', 
     'port'  => 27017, 
     'database' => 'theDatabase' 
    ) 
), 

문제입니다. "mongodb"연결을 완전히 대체하는 방법을 원합니다. 그래서 둘 중 하나가 아닌 둘 중 하나입니다.

어떻게하면됩니까?

답변

1

구성 파일의 다른 세트 만들기 :

app/config/local/database.php 
app/config/production/database.php 

을 그리고 파일을 삭제 (또는 당신이 그것을 원하지 않는 것) :

app/config/database.php 

을 그리고 당신이 가지고있는이 같은 환경을 설정하는

local 
development 

EDIT

이것은 환경을 완벽하게 설정하는 방법이므로 호스트 이름을 다루지 않아도 내 로컬 환경이 준비 및 프로덕션과 충돌하지 않습니다.

는 응용 프로그램의 루트에 .environment 파일을 생성하고 사용자 환경을 정의하고 그것에 민감한 정보를 추가 :

<?php 

return array(

    'APPLICATION_ENV' => 'development', /// this is where you will set your environment 

    'DB_HOST' => 'localhost', 
    'DB_DATABASE_NAME' => 'laraveldatabase', 
    'DB_DATABASE_USER' => 'laraveluser', 
    'DB_DATABASE_PASSWORD' => '!Bassw0rT', 

); 

.gitignore 파일에 추가, 그래서 당신은 전송 암호를 한 위험하지 않습니다 Github 또는 다른 서버로 전송할 수 있습니다.

foreach(require __DIR__.'/../.environment' as $key => $value) 
{ 
    putenv(sprintf('%s=%s', $key, $value)); 
} 

을 그리고 당신은 그냥 사용할 수 있습니다 :

오른쪽 $app->detectEnvironment 전에 파일 bootstrap/start.php에서, PHP 환경으로 .environment 파일을로드

$env = $app->detectEnvironment(function() { 

    return getenv('APPLICATION_ENV'); // your environment name is in that file! 

}); 

를 그리고이 모든 곳에서 작동합니다, 따라서 더 이상 개발 및 생산을 위해 별도의 디렉토리를 가질 필요가 없습니다.

<?php 

return array(

    'connections' => array(

     'postgresql' => array(
       'driver' => 'pgsql', 
       'host'  => getenv('DB_HOST'), 
       'database' => getenv('DB_DATABASE_NAME'), 
       'username' => getenv('DB_DATABASE_USER'), 
       'password' => getenv('DB_DATABASE_PASSWORD'), 
       'charset' => 'utf8', 
       'prefix' => '', 
       'schema' => 'public', 
     ), 

    ), 

); 
내가 대체를 설정하지

참고 : 나는 파일을 설정하지 않으면

return getenv('APPLICATION_ENV') ?: 'local'; 

이 때문에 나는 그것이 내가 내 응용 프로그램을 배포 모든 서버에를 실패합니다.

+0

주의 사항이 하나 있습니다. 응용 프로그램은 Amazon의 클라우드에서 호스팅되며, 자동 크기 조정과 함께 새 인스턴스 (새 호스트 이름 포함)를 추가 할 수 있습니다.기본적으로 프로덕션을 사용하는 대신 프로덕션 특정 디렉토리가있는 경우 프로덕션을 실행하려는 각 개별 호스트 이름을 지정하지 않아도됩니까? – Thelonias

+0

모든 프로덕션 파일을 새 인스턴스로 복사합니까? –

+0

예, 새로운 인스턴스가 시작될 때 Git repo에서 가져온 것으로, 실행중인 다른 서버와 동일하지만 시스템의 호스트 이름이 달라서'detectEnvironment'의 배열에 호스트 이름이 포함되지 않습니다 새 인스턴스에 대해. – Thelonias

관련 문제