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

时间:2011-02-19 14:40:44

标签: database zend-framework environment-variables environment

在基于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?)

的想法

期待听到有关该主题的一些回复。

此致

史蒂夫

1 个答案:

答案 0 :(得分: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.');
    }
} 

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

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