zend框架自动切换生产分期测试等

时间:2010-03-24 18:52:05

标签: zend-framework environment production staging

我将如何更改以从生产切换到舞台等等..以及.. Bootstrap?

此外,如果有人将Zend Framework配置为自动切换,那就好奇了 基于主机信息的生产,升级,测试......等。

示例..

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

我是Zend的新手,但我通常会将项目配置为自动切换 根据主机信息运行环境。

感谢

4 个答案:

答案 0 :(得分:15)

假设您正在使用APPLICATION_ENV作为Zend_Application的一部分,那么您可以在.htaccess或主Apache配置中添加它(假设正在使用Apache - 也应该可以使用不同的Web服务器)。

例如,在.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

然后使用以下命令确保在index.php中设置了APPLICATION_ENV:

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

如果您使用Zend_Tool生成项目,则会添加它。

答案 1 :(得分:4)

在.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"

答案 2 :(得分:1)

我们定义了一个环境变量(ENVPHP),并在我们的XML配置文件中使用它,因此只要您定义了正确的ENVPHP环境变量,就会加载正确的DB参数。使用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中有以下内容(好吧,实际上是在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()来检查我所处的环境并根据它执行我想要的代码。

BTW可以使用ie在您的apache配置文件中设置ENVPHP环境变量。 VirtualHost容器中的SetEnv ENVPHP "dev"。对于CLI PHP脚本,您应该将其设置为OS环境变量...

答案 3 :(得分:0)

我看到的最佳方式是:

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

但第一种方法要好得多。