如果我有一个新建项目,什么是最好的做法基于Perl的配置模块使用?

有将是一个的催化剂的应用程序和一些命令行脚本。它们应该共享相同的配置。

我想我要的某些功能......

层次结构配置干净地保持不同的开发和现场设置。

我想限定一次“全局”配置(例如,results_per_page => 20),都继承了那些覆盖但-能够通过我的dev /活CONFIGS。

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

当我一个项目部署到新的服务器,或分支/叉/复制新的地方(例如,新的开发实例),我想(仅一次)设置的配置set /文件来使用它,然后所有未来的更新是自动的。

我设想这可以用一个符号链接来实现:

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,让我CONFIGS既可以使用绝对路径,或相对于当前部署。给定

/home/me/development/project/
  bin
  lib
  etc/config

这里的/ home /我/开发/项目的/ 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

我也会喜欢小马;)

其他提示

Perl的最佳实践警告说,不要你想要什么。它指出,配置文件应该是简单,避免那种你想要巴洛克式的特点。它接着建议三个模块(其中没有一个是Perl核心):配置::一般配置::标准,和配置::微小

在一般合理的背后是,配置文件编辑往往是由非程序员,你让你的配置文件更为复杂,他们就越有可能会搞砸起来完成。

所有的这么说,你可以看看 YAML 。它提供了一个功能齐全,人性readable*,序列化格式。我相信,在Perl目前推荐解析器是 YAML :: XS 。如果你走这条路,我建议写一个配置工具,为最终用户使用而不是让他们直接编辑文件。

ETA:根据克里斯·杜兰的回答听起来YAML是因为催化剂已经在使用它(.yml是YAML文件的实际扩展)

去你的方式。

*我听说盲人可能有它的难度投诉

YAML是可恨的配置 - 这不是非程序员友好的部分原因是YAML在吊舱被定义为打破他们都是空白依赖以不同的方式。 解决了与配置::一般的主要问题。我用C编写的::摹一些相当复杂的配置文件,在过去,它真的保持你的出路,在语法要求等。除此之外方面,克里斯的意见,似乎在钱上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top