查看源代码 config
配置文件。
描述
一个配置文件包含系统中应用程序的配置参数值。 erl
命令行参数 -config Name
告诉系统使用系统配置文件 Name.config
中的数据。
erl 命令行参数 -configfd
的工作方式与 -config
选项相同,但指定一个文件描述符来读取配置数据,而不是文件。
来自配置文件和文件描述符的配置数据按照它们在命令行中给出的顺序读取。例如,erl -config a -configfd 3 -config b -configfd 4
将导致系统按照以下顺序读取配置数据:a.config
、文件描述符 3
、b.config
和文件描述符 4
。如果一个配置参数在给定的文件和文件描述符中多次指定,则最后一个会覆盖前面的参数。
配置文件或文件描述符中的配置参数值会覆盖应用程序资源文件中的值(请参阅 app(4)
)。 配置文件中的值总是被命令行标志覆盖(请参阅 erts:erl(1)
)。
通过调用 application:get_env/1,2
来检索配置参数的值。
文件语法
配置文件应命名为 Name.config
,其中 Name
可以是任何名称。
.config
文件包含一个 Erlang 项,并具有以下语法
[{Application1, [{Par11, Val11}, ...]},
...
{ApplicationN, [{ParN1, ValN1}, ...]}].
Application = atom()
- 应用程序名称。Par = atom()
- 配置参数的名称。Val = term()
- 配置参数的值。
sys.config
在嵌入模式下启动 Erlang 时,假设只使用一个名为 sys.config
的系统配置文件。此文件应位于 $ROOT/releases/Vsn
中,其中 $ROOT
是 Erlang/OTP 根安装目录,Vsn
是发布版本。
发布处理依赖于此假设。安装新的发布版本时,将读取新的 sys.config
并用于更新应用程序的配置。
这意味着指定另一个 .config
文件或多个 .config
文件会导致应用程序配置的不一致更新。但是,有一种方法可以从 sys.config
中指出其他配置文件。如何做到这一点将在下一节中描述。
从 sys.config 和 -configfd 配置中包含文件
有一种方法可以从 sys.config
文件和从使用 -configfd
命令行参数指定的文件描述符获取的配置中包含其他配置文件。
包含文件的语法可以用 Erlang 类型语言 描述如下
[{Application, [{Par, Val}]} | IncludeFile].
IncludeFile = string()
-.config
文件的名称。可以省略扩展名.config
。建议使用绝对路径。如果在sys.config
中使用相对路径,则首先相对于sys.config
目录搜索IncludeFile
,然后相对于模拟器的当前工作目录搜索。如果在-configfd
配置中使用相对路径,则首先相对于包含 引导脚本 的字典(另请参阅模拟器的-boot
命令行参数)搜索IncludeFile
,然后相对于模拟器的当前工作目录搜索。这使得可以使用sys.config
来指出发布版本或其他.config
文件,或者使用-config
或-configfd
手动启动的节点,无论当前工作目录是什么,结果都相同。
当遍历 sys.config
或 -configfd
配置的内容并遇到文件名时,会读取其内容并与到目前为止的结果合并。当找到应用程序配置元组 {Application, Env}
时,它会与到目前为止的结果合并。合并意味着添加新参数并覆盖现有参数值。
示例
sys.config:
["/home/user/myconfig1"
{myapp,[{par1,val1},{par2,val2}]},
"/home/user/myconfig2"].
myconfig1.config:
[{myapp,[{par0,val0},{par1,val0},{par2,val0}]}].
myconfig2.config:
[{myapp,[{par2,val3},{par3,val4}]}].
这将为 myapp
产生以下环境
[{par0,val0},{par1,val1},{par2,val3},{par3,val4}]
如果 sys.config
或 -configfd
配置中指定的包含文件不存在或有错误,则运行时系统会在启动之前中止。但是,如果在加载包含文件时出现错误,安装新发布版本不会失败,但会返回错误消息并忽略错误文件。