2016-03-29 7 views
2

Benim tipik gelişme düzeni:Codeigniter: Birden çok veritabanı bağlantısı verilerinin sürdürülmesi için en iyi uygulama nedir?

1 - local work machine 

2 - online testing server 

3 - production server. 

Bunların her biri benzersiz bağlantı bilgileri ile bir veri tabanı vardır.

Projelerim için, çevreye bağlı olarak uygun db bağlantı bilgilerini (ana bilgisayar, kullanıcı adı, parola, db adı, ...) atayan bir switch(what_environment){ // assign appropriate db connection info } uygulayan bir yapılandırma dosyası kullanıyorum.

Ancak, codeigniter'in /config/database.php numaralı sürümünde, böyle bir yapı yoktur, bunun yerine yalnızca tek özellik kümesidir. Açıkçası kendi sunucu-koklayıcı anahtar ifademi oraya koyabilirim. Ama bunun üstesinden gelmek için kod yazarı bir yol olduğunu düşünüyorum.

Birden çok db bağlantı kurmayı sürdürmek için uygun kod işaretleyici birisine ışık tutabilir mi?

+0

apache kullanıyor musunuz? – sintakonte

cevap

1

: üzerinde Sonra

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; 

senin application/config/DatabaseFunctions.php

$db['default'] = array(

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

); 
+0

bunun cevabı gibi görünüyor.ancak ÇEVRE değişkenini kullanmak, her farklı bir sunucuya her yüklediğinizde manuel olarak ayarlamak zorunda kalıyor. Bunu otomatikleştirmek için sunucu-koklama kullanıyorum ($ _SERVER ["DOCUMENT_ROOT"] dizesini analiz edin) ... teşekkürler. – dsdsdsdsd

+0

Anlaştık! (sunucu koklama yöntemi). Yukarıdaki kod, DB bağlantısını 'kokla' veya tanımlanmış olarak ÇEVREYE göre dinamik olarak nasıl ayarlayacağınızı göstermek içindir. Mutlu kodlar! – Elymentree

+0

Daha da kötüsü olsa da ... daha da kötüsü: global kapsam içine sabit koymak ya da bir fonksiyon kapsamı içine koymak için ... – dsdsdsdsd

1

bu en iyi çözüm olup olmadığını bilmiyorum, ancak uygulamak için en basit ve her zaman benim için çok iyi çalıştı:

$ db [ 'default'] ilanından sonra:

projenizin index.php'de olarak

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

:

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

Bu kodu eklemek

application/config/constants.php yazma Açık
+0

bu benim etkili bir şekilde var, ama 'codeigniter yol' değil ... Ayrıca bu geliştirici başka bir sunucuya yüklemeden önce ÇEVRE değişkenini değiştirmek için zorlar (yerine, $ _SERVER ["DOCUMENT_ROOT"] 'u kokluyorum hangi sunucuya otomatik olarak karar vereceğini belirler) – dsdsdsdsd

1

apache'yi kullanırsanız - SetEnvIf (eğer o itsn etkinleştirmek zaten 't) senin htaccess koy sonra

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

şimdi sadece basitçe application/config/klasör 3 klasör adında geliştirme, test ve üretim

oluşturmak ve bu klasörlerde şimdi farklı yapılandırma dosyaları koyarsanız - ci mevcut çalışma ortamı

bağlı olarak erişir

Bu

$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 gibi birden ortam ayarlayabilirsiniz DatabaseFunctions.php config/At ileri Bilgiler

+0

bu yararlı çünkü CI_ENV özelliğinin htaccess içinde nasıl ayarlandığını gösterdiği için teşekkürler ... – dsdsdsdsd