2010-03-24 13 views
6

Üretimden kademelendirmeye geçmek için ne değiştirebilirim? Vb .. ve nerede .. Bootstrap? Ayrıcazend framework otomatik anahtar üretim evreleme testi .. vb

, Meraklı herkes otomatik olarak ana bilgi ..

örnek .. ben

if (hostname = 'prodServer') ... blah 
if (hostname = 'testServer') ... blah 

dayalı üretim, evreleme, testin .. vb geçmek için onların Zend Framework yapılandırılmış olup olmadığını Zend için yeni ama genellikle benim projeleri otomatik olarak çalışma ortamlarını ana bilgisayar bilgilerine göre değiştirecek şekilde yapılandırıyorum. Gördüğüm

sayesinde

cevap

15

Zend_Application'ın bir parçası olarak APPLICATION_ENV kullandığınızı varsayarak bunu, .htaccess veya ana Apache yapılandırmanızda ekleyebilirsiniz (Apache'nin kullanımda olduğu varsayılırsa - yine farklı Web sunucularında da mümkün olabilir).

Örneğin, .htaccess/config (mod_setenv varsayar):

SetEnvIf HTTP_HOST abc.example.com APPLICATION_ENV=production 
SetEnvIf HTTP_HOST def.example.com APPLICATION_ENV=staging 
SetEnvIf HTTP_HOST ghi.example.com APPLICATION_ENV=development 

Sonra APPLICATION_ENV kullanarak index.php ayarlandığından emin olun:

// Define application environment 
defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); 

Bu Zend_Tool tarafından eklendi projeyi oluşturmak için kullanırsanız.

+0

SetEnvIf Ana bilgisayar def.example.com APPLICATION_ENV = aşamalandırma benim için – Yeroon

+0

daha iyi bir şekilde görünüyor: SetEnvIf HOST^abc.example.com $ APPLICATION_ENV = üretim ... – Kamil

0

iyi yoludur:

index.php - production 
index_dev.php - dev, index_dev.php/controller/action 

Ben de konak adlı yapılandırmaları dosyaları çalıştı:

base.ini - base config 
localhost.ini - dev config 
prod.host.com.ini - prod config 

ama ilk yaklaşım çok daha iyidir.

+2

Ayrı dizin dosyalarında hiçbir değeri göremiyorum, en iyi şekilde görmekteyim. İdeal olarak, ortam değişmeli (bu donanım/sunucu), dev -> test -> aşamalandırma -> üretimden hareket ederken kod aynı olmalıdır. Ortamlar arasındaki gerçek fark, hedef kitleye yöneliktir (ve bu düzey hata ayıklama/günlük etkinliği düzeyi). Yani SetEnv .htaccess (veya sanal ana bilgisayar konfigürasyonu) içinde bulunduğunuz alanı tanımlamanız gerekir, ve bir realm/ortamınız olduğunda - ilgili * tek * ini dosyanızdan karşılık gelen bölümü yüklersiniz. –

+0

Tanımladığınız yerde fark yoktur, avantajı prod/dev ortamının hızlı değişmesidir. –

+0

Fark, bir durumda sunucudaki ortamı tanımladığınız ve diğer durumda, istemci ortamı seçecektir. Bunun birkaç dezavantajı vardır: Bir index_dev.php dosyasını dağıtırsanız, Güvenlik. Bakım: kodunuzda, kodunuzun tanımlandığı iki veya daha fazla noktanız vardır (config, index_ .php, api_ .php, cli_ .php, ...); Müşterilerinize (AJAX, WebService-Clients, Shell-Scrips, ...) farklı ortamlar için farklı dosyalara/URI'lere erişim sağlamanız gerektiğini söylemelisiniz. . – stofl

1

Biz bir ortam değişkeni (ENVPHP) tanımlamak ve bizim XML yapılandırma dosyalarında kullanmak, bu yüzden doğru DB parametreleri sürece doğru ENVPHP ortam değişkeni tanımlamak olarak yüklenir. XML kullanarak, ortak parametrelerinizi belirli ortamlar için genişletebilir (veya geçersiz kılabilirsiniz).

ie. aşağıdaki gibi yapılandırma görünür:

<?xml version="1.0" encoding="UTF-8"?> 
<application> 
    <common> 
     <name>MyApp_name</name> 
     <code>MyApp_code</code> 
     <version>MyApp_version</version> 
     <authentication> 
      ... authentication specific parameters (ie. LDAP connection parameters) 
     </authentication> 
     ... 
    </common> 
    <dev extends="common"> 
     <database> 
      ... DB connection parameters for development 
     </database> 
     ... 
    </dev> 
    <tst extends="common"> 
     <database> 
      ... DB connection parameters for test 
     </database> 
     ... 
    </tst> 
    <prd extends="common"> 
     <database> 
      ... DB connection parameters for production 
     </database> 
     ... 
    </prd> 
</application> 

Ve yapılandırmayı yüklemek için, ben (aslında bir uygulama tekil sınıfında, iyi) benim bootstrap aşağıdaki adres:

public static function getEnv() 
{ 
    if (self::$env === null) { 
     self::$env = getenv('ENVPHP'); 
    } else { 
     return self::$env; 
    } 
} 

protected function initConfig() 
{ 
    $configFile = $this->appDir . '/config/application.xml'; 
    if (! is_readable($configFile)) { 
     throw new Application_Exception('Config file "' . $configFile . '" is not readable'); 
    } 
    if (false === self::getEnv()) { 
     throw new Application_Exception('The environment variable "ENVPHP" is not defined'); 
    } 
    $config = new Zend_Config_Xml($configFile, self::getEnv(), true); 
    $config->setReadOnly(); 

    Zend_Registry::set('config', $config); 
    $this->config = $config; 
} 

PHP kodunda İstersem sadece belirli ortamlar için bazı şeyler yapmak için sonra hangi ortamda olduğumu kontrol etmek ve buna göre istediğim kodu yürütmek için Application :: getEnv() öğesini kullanırım.

BTW ENVPHP ortam değişkeni, apache yapılandırma dosyasında örn. VirtualHost konteynerünüzün içinde SetEnv ENVPHP "dev". CLI PHP komut dosyaları için size ... bir OS ortam değişkeni olarak .htaccess

benim uygulamada Sonra
SetEnvIf Host dev.mydomain.ca APPLICATION_ENV=development 
SetEnvIf Host mydomain.ca APPLICATION_ENV=production 
SetEnvIf Host mydomain.localhost APPLICATION_ENV=production 

benim için çalışmak

4

bunu belirlesin.ini

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 
; Database for development 
resources.db.params.dbname = "mydabase-dev"