2016-03-29 5 views
2

私の一般的な開発パターンは次のとおりです。Codeigniter:複数のデータベース接続データを維持するベストプラクティスは何ですか?

1 - local work machine 

2 - online testing server 

3 - production server. 

これらのそれぞれが独自の接続データを使用してデータベースを持っています。

私のプロジェクトでは、環境に応じて適切なdb接続情報(ホスト、ユーザー名、パスワード、db名、...)を割り当てるswitch(what_environment){ // assign appropriate db connection info }を実装する設定ファイルを使用します。

ただし、コードシニータの/config/database.phpには、そのような構成はありませんが、ちょうどプロパティのセットです。明らかに私は自分自身のサーバースニッフィングスイッチステートメントをそこに置くことができます。しかし、私はそれを扱うコードの方法があると推測しています。

誰もが複数のdb接続情報を維持する適切なcodeigniterの方法で光を当てることができますか?

+0

Apacheを使用していますか? – sintakonte

答えて

1

define('ENVIRONMENT', 'development'); 


switch(ENVIRONMENT): 

case 'development': 
# DB 
defined('DB_HOST')  ? null : define('DB_HOST', 'localhost'); 
defined('DB_USER')  ? null : define('DB_USER', 'root'); 
defined('DB_PASSWORD') ? null : define('DB_PASSWORD', ''); 
defined('DB_NAME')  ? null : define('DB_NAME', 'dev_db'); 
break; 

case 'production': 
# DB 
defined('DB_HOST')  ? null : define('DB_HOST', 'production'); 
defined('DB_USER')  ? null : define('DB_USER', 'production_user'); 
defined('DB_PASSWORD') ? null : define('DB_PASSWORD', '12345'); 
defined('DB_NAME')  ? null : define('DB_NAME', 'production_db'); 
break; 

endswitch; 

次に、あなたのアプリケーションの/ configに/ database.phpで

$db['default'] = array(

    'hostname' => DB_HOST, 
    'username' => DB_USER, 
    'password' => DB_PASSWORD, 
    'database' => DB_NAME, 

); 
+0

これは答えのようです。ENVIRONMENT変数を使用するには、別のサーバーにアップロードするたびに手動で設定する必要があります。私はそれを自動化するためにサーバースニッフィングを使用します($ _SERVER ["DOCUMENT_ROOT"]文字列を分析する)...ありがとう。 – dsdsdsdsd

+0

合意! (サーバースニッフィング方法)。上記のコードは、ENVIRONMENTに応じて動的にDB接続を設定する方法を示しています。ハッピーコーディング! – Elymentree

+0

私は思っていますが... ...悪いです:定数をグローバルスコープに入れたり、関数スコープ内に設定する... – dsdsdsdsd

1

これが最善の解決策である場合、私は知りません、しかし、それは実装が最も簡単であり、常に私のために非常によく働い:

$デシベル[「デフォルト」]の宣言の後:

プロジェクトのindex.phpのでは

if (ENVIRONMENT == 'development'){ 
    $db['default']['username'] = 'root'; 
    $db['default']['password'] = 'XXXXX'; 
    $db['default']['database'] = 'developmentdatabasename'; 
} 

$db['default'] = array(
    'dsn' => '', 
    'hostname' => 'localhost', 
    'username' => '...', 
    'password' => '...', 
    ... 
); 

私はこのコードを追加

アプリケーション/設定/ constants.php書き込みで3210
+0

これは効果的ですが、 'codeigniter way'ではありません...これは開発者に別のサーバにアップロードする前にENVIRONMENT変数を変更するよう強制します(代わりに '$ _SERVER [" DOCUMENT_ROOT "]'どのサーバーを自動的に決定する値) – dsdsdsdsd

1

Apacheを使用する場合 - それitsn場合(SetEnvIfディレクティブを活性化させますすでに「T)

そのプットした後、あなたのhtaccessで

SetEnvIf Host localhost$ CI_ENV=development 
SetEnvIf Host testhost$ CI_ENV=testing 
SetEnvIf Host productionhost$ CI_ENV=production 

は今、単にアプリケーション/設定/フォルダ内の開発、テスト、本番

という名前の3のフォルダを作成し、このフォルダに今、あなたのさまざまな設定ファイルを置けば - ciは、あなたの現在の作業環境に

を依存し、それをアクセスします

この

$active_group = 'local'; 
if(ENVIRONMENT=='development') 
{ 
    $active_group = 'online'; 
} 
elseif(ENVIRONMENT=='production') 
{ 
    $active_group = 'production'; 
} 
$db['local'] = array(
'dsn' => '', 
'hostname' => 'xxxx', 
'username' => '', 
//other configs 
); 
$db['online'] = array(
'dsn' => '', 
//other configs 
); 
$db['production'] = array(
'dsn' => '', 
//other configs 
); 

Yのように、複数の環境を設定することができますdatabase.phpであなたのconfig /時の詳細な情報のCI Documentation

+0

これは、htaccess内でCI_ENVプロパティがどのように設定されているかを示しています。 – dsdsdsdsd

1

に従ってください。あなたは多くの方法を行うことができます。documentation

+0

'documentation'リンクに感謝します – dsdsdsdsd

関連する問題