Zend framework zend framework自动切换生产阶段测试。。等

Zend framework zend framework自动切换生产阶段测试。。等,zend-framework,environment,production,staging,Zend Framework,Environment,Production,Staging,要从生产切换到暂存,我需要做哪些更改。。等在哪里。。引导 另外,我很好奇是否有人配置了他们的Zend框架来自动从 生产、分期、测试。。基于主机信息等 例如 if (hostname = 'prodServer') ... blah if (hostname = 'testServer') ... blah 我是Zend的新手,但我通常会将我的项目配置为自动切换 根据主机信息运行环境 谢谢我看到的最好的方式是: index.php - production index_dev.php - d

要从生产切换到暂存,我需要做哪些更改。。等在哪里。。引导

另外,我很好奇是否有人配置了他们的Zend框架来自动从 生产、分期、测试。。基于主机信息等

例如

 if (hostname = 'prodServer') ... blah
 if (hostname = 'testServer') ... blah
我是Zend的新手,但我通常会将我的项目配置为自动切换 根据主机信息运行环境


谢谢

我看到的最好的方式是:

index.php - production
index_dev.php - dev, index_dev.php/controller/action
我还尝试了名为configs的主机文件:

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

但是第一种方法要好得多。

假设您正在使用APPLICATION_ENV作为Zend_应用程序的一部分,那么您可以将其添加到.htaccess或主Apache配置中(假设Apache正在使用中-对于不同的Web服务器也应该是可能的)

例如,在.htaccess/config中(假设mod_setenv):

然后使用以下命令确保在index.php中设置了应用程序_ENV:

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

如果您使用Zend_工具生成项目,它将被添加。

我们定义了一个环境变量(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>
要加载配置,我的引导程序中有以下内容(实际上是在应用程序单例类中):

在PHP代码中,如果我只想为特定的环境做一些事情,那么我使用Application::getEnv()检查我所处的环境,并根据它执行我想要的代码


顺便说一句,可以使用VirtualHost容器中的ie.
SetEnv ENVPHP“dev”
在apache配置文件中设置ENVPHP环境变量。对于CLI PHP脚本,应将其设置为在.htaccess中适用于我的OS环境变量…

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"

老实说,我认为单独的索引文件没有任何价值,更不用说将其视为最佳方式了。理想情况下,环境应该改变(即硬件/服务器),而从dev->testing->staging->production移动时的代码应该是相同的。环境之间的真正区别在于目标受众(以及调试/日志活动的级别)。因此.htaccess(或虚拟主机配置)中的SetEnv应该定义您所处的领域,一旦您有了一个领域/环境,您就可以从单个ini文件加载相应的部分。定义它的地方没有区别,优点是快速切换prod/dev环境。区别在于,在一种情况下,您在服务器中定义环境,而在另一种情况下,客户机将选择环境。这有几个缺点:如果部署索引_dev.php,则会带来安全性。维护:代码中有两个或多个点,其中定义了环境(config、index.php、api.php、cli.php等);您必须告诉您的客户机(AJAX、WebService客户机、Shell Scrips等),要访问不同环境下的不同文件/URI,您甚至必须告诉您的客户机“您”所在的环境希望客户端请求.setenif Host def.example.com应用程序_ENV=为我准备工作更好的方法似乎是:setenif Host ^abc.example.com$APPLICATION_ENV=生产。。。
SetEnvIf Host dev.mydomain.ca APPLICATION_ENV=development
SetEnvIf Host mydomain.ca APPLICATION_ENV=production
SetEnvIf Host mydomain.localhost APPLICATION_ENV=production
[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"