промежуточный тест автоматического переключения производства zend framework ..и т.д.

StackOverflow https://stackoverflow.com/questions/2510556

Вопрос

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

Также любопытно, настроил ли кто-нибудь свой Zend Framework для автоматического переключения с production, staging, test..и т.д. на основе информации о Хосте..

пример..

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

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

Спасибо

Это было полезно?

Решение

Предполагая, что вы используете 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, если вы используете его для создания проекта.

Другие советы

Это работает для меня в .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"

Мы определяем переменную среды (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>

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

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 вы должны установить его в качестве переменной окружения операционной системы...

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top