Zend Framework Автоматическое переключение производства постановка теста .. и т. д. - PullRequest
6 голосов
/ 24 марта 2010

Что я могу изменить, чтобы переключиться с производства на подготовку ... и т. Д. И где ... Bootstrap?

Кроме того, интересно, если кто-нибудь настроил Zend Framework для автоматического переключения с производства, подготовки, тестирования.и т. д. на основе информации о хосте ..

пример ..

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

Я новичок в Zend, но обычно я настраиваю свои проекты для автоматического переключения сред выполнения на основе информации о хосте.

спасибо

Ответы [ 4 ]

15 голосов
/ 26 марта 2010

Предполагая, что вы используете APPLICATION_ENV как часть Zend_Application, вы можете добавить это либо в свой .htaccess, либо в основной конфигурацию Apache (при условии, что Apache используется - все еще возможно с другими веб-серверами).

Например, в вашем .htaccess / config (предполагается, что mod_setenv):

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

Затем убедитесь, что APPLICATION_ENV установлен в index.php с помощью:

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

Это добавляется Zend_Tool, если вы используете его для генерации проекта.

4 голосов
/ 01 июля 2011

Это работает для меня в .htaccess

SetEnvIf Host dev.mydomain.ca APPLICATION_ENV=development
SetEnvIf Host mydomain.ca APPLICATION_ENV=production
SetEnvIf Host mydomain.localhost APPLICATION_ENV=production

Тогда в моем application.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"
1 голос
/ 26 марта 2010

Мы определяем переменную среды (ENVPHP) и используем ее в наших файлах конфигурации XML, поэтому правильные параметры БД загружаются, пока вы определяете правильную переменную среды ENVPHP. Используя XML, вы можете расширить (или переопределить) ваши общие параметры с параметрами для конкретных сред.

т. конфигурация выглядит следующим образом:

<?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>

И чтобы загрузить конфигурацию, у меня в загрузчике есть следующее (ну, на самом деле в одноэлементном классе приложения):

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-коде, если я хочу сделать что-то только для определенных сред, тогда я использую Application :: getEnv (), чтобы проверить, в какой среде я нахожусь, и выполнить код, который я хочу в соответствии с ним.

Кстати, переменная окружения ENVPHP может быть установлена ​​в вашем файле конфигурации apache с помощью ie. SetEnv ENVPHP "dev" в вашем контейнере VirtualHost. Для сценариев CLI PHP вы должны установить его как переменную среды ОС ...

0 голосов
/ 26 марта 2010

Лучший способ, который я увидел:

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

Я также попробовал файлы с именами хостов:

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

но первый подход намного лучше.

...