如果我有一个新建项目,使用基于 Perl 的配置模块的最佳实践是什么?
将有一个 Catalyst 应用程序和一些命令行脚本。它们应该共享相同的配置。
我想我想要的一些功能......
分层配置以干净地维护不同的开发和实时设置。
我想定义一次“全局”配置(例如,results_per_page => 20),让那些继承但可以被我的开发/实时配置覆盖。
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
我也想要一匹小马;)