Если у меня есть проект с нуля, какой модуль конфигурации на основе Perl лучше всего использовать?
Будет приложение Catalyst и несколько сценариев командной строки. Они должны иметь одинаковую конфигурацию.
Некоторые функции, я думаю, что я хочу ...
Иерархические конфигурации для чистого поддержания различных параметров разработки и оперативных параметров.
Я бы хотел один раз определить «глобальные» конфигурации (например, results_per_page => 20), чтобы они были унаследованы, но переопределены в моих конфигурациях dev / live.
Global:
results_per_page: 20
db_dsn: DBI:mysql;
db_name: my_app
Dev:
inherit_from: Global
db_user: dev
db_pass: dev
Dev_New_Feature_Branch:
inherit_from: Dev
db_name: my_app_new_feature
Live:
inherit_from: Global
db_user: live
db_pass: secure
Когда я развертываю проект на новом сервере или ветвлю / разветвляю / копирую его где-то в новом месте (например, в новый экземпляр разработки), я хочу (только один раз) указать, какой конфигурационный набор / файл использовать, а затем все последующие обновления выполняются автоматически.
Я бы предположил, что это может быть достигнуто с помощью символической ссылки:
git clone example.com:/var/git/my_project . # or any equiv vcs
cd my_project/etc
ln -s live.config to_use.config
Тогда в будущем
git pull # or any equiv vcs
Мне бы также хотелось что-то похожее на FindBin, чтобы мои конфиги могли использовать либо абсолютные пути, либо относительно текущего развертывания. Учитывая
/home/me/development/project/
bin
lib
etc/config
где / home / me / development / project / etc / config содержит:
tmpl_dir: templates/
когда мой perl-код ищет конфигурацию tmpl_dir, он получает:
/home/me/development/project/templates/
Но в режиме реального времени:
/var/www/project/
bin
lib
etc/config
Тот же код волшебным образом вернет
/var/www/project/templates/
Необходимо учитывать абсолютные значения в конфигурации, так что:
apache_config: /etc/apache2/httpd.conf
вернет "/etc/apache2/httpd.conf" во всех случаях.
Вместо подхода, основанного на стиле FindBin, альтернативой может быть разрешение определения значений конфигурации в терминах других значений конфигурации?
tmpl_dir: $base_dir/templates
Я бы тоже хотел пони;)