Извлечение настроек базы данных из application.ini и в среду - PullRequest
4 голосов
/ 19 февраля 2011

В традиционном кодировании приложений на основе Zend настройки базы данных хранятся в файле application.ini.При этом настройки сохраняются для каждого приложения.

Кто-нибудь здесь, на StackOverflow, исследовал возможность перемещения настроек базы данных из application.ini в среду?Например, основным способом было бы, возможно, сохранить настройки соединений с базой данных в файле envvars Apache2 или, возможно, что-то вроде / etc / profile или / etc / environment.

Есть несколько причин, по которым я хотел бысделать это:

1) Существует угроза безопасности, если в приложении есть действующие настройки производственной базы данных.Разработчики могут случайно подключиться к действующей базе данных и нанести ущерб конфиденциальным данным клиентов.Это защитит как разработчиков, так и бизнес конечных пользователей.

2) Сложно поддерживать и управлять настройками БД нескольких приложений.Например, если имя пользователя или пароль изменится для базы данных, нам потребуется изменить файл application.ini или несколько приложений, что будет означать повторное развертывание только этого файла или всего приложения.

3) AnПриложение может быть развернуто в нескольких «производственных» средах, где настройки базы данных различаются.Поэтому в application.ini может быть несколько разделов - например, и production-datacentreX, production-datacentreY.

Как видите, существует аргумент о сохранении настроек базы данных на стороне сервера.Следовательно, может быть лучше иметь настройки базы данных вне приложения в глобальной области для доступа всех приложений?Это было бы в его собственном контроле исходного кода, возможно, это было бы недоступно для разработчиков.

Что вы думаете, ребята?Кто-нибудь делал что-то подобное?Мне нравится идея глобального application.ini (возможно, называется database.ini?)

Буду рад услышать некоторые ответы по этому вопросу.

С уважением,

Стив

1 Ответ

5 голосов
/ 20 февраля 2011

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

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

...