Конфигурация WebApp в среде mod_perl 2 - PullRequest
1 голос
/ 12 октября 2011

У меня есть веб-приложение, которое я пишу в mod_perl 2. (Это пользовательский модуль-обработчик, а не сценарии реестра или perlrun.) Есть несколько параметров конфигурации, которые я хотел бы установить при инициализации сервера, предпочтительно из конфигурациифайл.Проблема в том, что я не нашел подходящего места для передачи имени файла для файла конфигурации моего приложения.

Сначала я попытался загрузить «./app.conf», но текущий каталог нерасположение модулей, поэтому оно непредсказуемо и подвержено ошибкам.Или я должен принять какой-то путь - относительный или абсолютный.Это негибко и может быть проблематично в случае изменения дистрибутива ОС.Я не хочу жестко кодировать путь (хотя что-то в / etc может быть приемлемым, если нет лучшего способа).

Я также пробовал PerlSetVar, но значение недоступно до времени запроса,Хотя это работает, это означает, что я потенциально читаю конфигурационный файл с диска, по крайней мере, один раз для дочернего (потока) init.Я предпочел бы загрузить на сервере init и иметь неизменный статический хеш, который является частью порожденной среды при создании дочернего элемента.

Я рассмотрел использование config.pl, но это означает, что у меня либо есть config.plс одной опцией, чтобы настроить, где найти файл app.conf, или я переместил сами опции в config.pl и потребовал, чтобы конечные пользователи уважали синтаксис Perl при настройке опций.Будущие пользователи будут внутренними администраторами, так что это не лишено смысла, но это сложнее, чем хотелось бы.

Так чего мне не хватает?Есть хорошие альтернативы?

1 Ответ

0 голосов
/ 03 ноября 2011

Обычно главным приоритетом является недопущение наличия файлов конфигурации среди ваших исполняемых файлов. В противном случае неверная конфигурация сервера может случайно показать миру вашу личную информацию о конфигурации. Я поместил все, что нужно приложению, в /srv/app0, с subdir cfg, который является родственным каталогу, содержащему исполняемые файлы. ( Подробнее. )

Если вы предварительно загружаете модули через PerlPostConfigRequire startup.pl для доступа к mod/startup.pl, тогда это лучшее место для размещения файла конфигурации ../cfg/app.cnf, и вы имеете полную гибкость в отношении сохранения конфигурации в памяти. Альтернативой является PerlModule ваших модулей и загрузка конфигурации (с относительным путем, как указано выше) в блоке BEGIN внутри одного из них.

Обычно обработка файла конфигурации не занимает заметного времени, поэтому популярным вариантом является отложенная загрузка: если код обнаруживает, что конфигурация отсутствует, он загружает ее перед продолжением. Это бесполезно, если код должен был знать конфигурацию раньше, но это позволяет избежать многих проблем, особенно при переносе кода в среду без modperl.

...