将数据库设置从application.ini中取出并放入环境中

Ste*_*iff 4 database environment zend-framework environment-variables

在基于Zend的应用程序的传统编码中,数据库设置存储在application.ini中.这将按应用程序存储设置.

StackOverflow上有没有人探讨过将数据库设置从application.ini迁移到环境中的可能性?例如,一种基本方法是在Apache2 envvars文件中存储可能的数据库连接设置,或者可能在/ etc/profile或/ etc/environment中存储.

我想这样做有几个原因:

1)在应用程序中具有实时,生产数据库设置存在安全风险.开发人员可能无意中连接到实时数据库并导致客户敏感数据受损.这将保护开发人员,企业和最终用户.

2)很难维护和管理多个应用程序的数据库设置.例如,如果数据库的用户名或密码发生更改,那么我们需要更改application.ini或多个应用程序,这意味着只会再次推出该文件或整个应用程序.

3)可以将应用程序部署到数据库设置不同的多个"生产"环境中.因此,application.ini中可能必须有多个部分 - 例如,production-datacentreX,production-datacentreY.

如您所见,有一个关于在服务器端保留数据库设置的争论.因此,在全局区域中的应用程序外部可能有数据库设置供所有应用程序访问可能更好吗?这可能是它自己的源代码控制,也许是开发人员无法访问的.

你们有什么想法?有人做过类似的事吗?我喜欢全局application.ini的想法(可能叫做database.ini?)

期待听到有关该主题的一些回应.

问候,

史蒂夫

Rad*_*kel 5

在我的上一个项目中,我做了类似的事情.我有application.ini它存储在存储库中,并包含应用程序的常见设置(视图设置,帮助程序路径,启用布局和类似的东西).但是,每个应用程序实例(每个开发人员都有一个+测试和开发服务器)都有自己的local.ini文件(没有版本化),包含数据库设置和开发指令(启用FirePHP,ZFDebug).由于该解决方案,我们可以"全局" - application.ini进行更改,每个开发人员都可以使用local.ini文件"本地"更改设置.

Bootstrap.php我合并他们如下:

protected function _initLocalConfig()
{
    $globalConfig = new Zend_Config($this->getOptions(), true);
    try {
        $localConfig = new Zend_Config_Ini(APPLICATION_PATH . '/configs/local.ini');
        $globalConfig->merge($localConfig);
        $this->setOptions($globalConfig->toArray());
    } catch (Zend_Config_Exception $e) {
        throw new Exception('File /configs/local.ini not found. Create it, it can be empty.');
    }
} 
Run Code Online (Sandbox Code Playgroud)

我在这里使用第二个静态命名.ini文件,在另一个项目中我们使用基于主机名的.ini文件.它们也可以是JSON,XML或YAML文件(利用内置的Zend_Config解析器),或者您可以编写自己的适配器.

就像你看到的那样,你可以从你想要的任何地方带走你的非常见配置:)