关于Erlang/OTP的application参数配置

阅读更多


Erlang/OTP中将完成特定功能的一组模块组织起来,称之为 application 。(这不是个好名字,因为它与我们约定俗成的application有着不同的含义,例如在JEE这样的开发中,整个应用系统被称为一个application;在iOS中一个独立游戏、一个小工具都被称为一个application。Erlang中的application其实是一种大的功能模块,例如lager这个application为其他模块提供日志功能)

erlang/OTP的application模块(指erlang module)是一种最基本的behavior,是Erlang代码和功能组织的形式(见 Erlang OTP设计原则)

application运行时可能需要提供某些参数,以调整运行时的行为。例如数据库的连接参数(主机名,端口号等),这些参数可以存放在静态配置文件中,application运行时可以通过调用application:get_env(ParamKey)得到当前application配置的参数值。get_env(Foo, Par)得到某个指定application,Foo的配置参数值.

以application lager的配置为例,lager有多个日志级别(debug/info/warning/error),配置不同级别的日志会影响日志的输出,此外日志文件的名字和存放位置也是可以配置的,这些都可以作为lager的运行参数在lager启动时配置。

实际上,application的参数可以在很多地方配置(例如: 在静态配置文件中配置,一般是application的.app文件,甚至在erlang启动时作为启动命令的一部分为某个application配置运行参数),因此搞清这些不同地方进行配置关系(比如配置的缺省位置和如何覆盖override参数)是进行erlang OTP开发的基本功。

每个application的运行参数可视为一种环境参数,这些参数可以在三个层次进行配置,如图所示
关于Erlang/OTP的application参数配置_第1张图片

上层的配置可以覆盖(override)下层的配置:

Application Resource File, (.app文件)图中最底层(橙色),每个application都要自己的资源文件,这些文件都有统一的格式,其中有个env属性,用于为本application配置环境参数, 详细信息。因为最底层配置的参数总能被上层的参数覆盖,而且资源文件中的参数只限于本application,所以application的缺省参数在此配置最好。

System Configuration File, (.config文件), 图中第二层(绿色),当多个application连同erlang运行时, lib库打包发布时,整个发布包(粉红色虚线框)会有一个sys.config,在sys.config文件中配置可以对特定的application的环境参数进行定制:同名的参数将被覆盖。作为整个发布的配置文件, sys.config可以同时对发布包中的多个application进行参数配置。而且在我们的发布里不一定都叫sys.config这个名字,可以在erl命令的选项-config中 指定其它名字。

最高层(蓝色),直接在erl命令中直接为某个application配置参数, 详细信息,例如如果打算将lager的日志级别设为debug(缺省是info),可以这样:
erl -lager handlers '[{lager_console_backend, debug}]'

如例所示,参数的值可以是比较复杂的erlang term,记得要用引号引起来。

这一级别显然比较适合在application开发、调试时临时调整application参数用。



这些配置参数的值实际上在application启动之前就已生效。比如上述例子中在erl启动时配置了lager的运行参数,但此时lager这个application还没有启动,当用application:start/1 启动lager后,相关的配置参数在此时应用到lager上。


另外,还有一种特殊的application叫做 Library Applications(比如一个复数函数库),这种application有可能只提供一些函数,不会直接有erlang进程生成,所以一般不需要application:start就能使用。Library Applications中的参数也可以在app.src文件中配置,但是不用application:start这些文件中参数是不会自动加载的。


还要注意的一点是:当对系统打包发布(release)时, 只能通过修改System Configuration File(默认名是sys.config的文件)覆盖环境配置参数,发布后再修改发布包中application的app文件是没有效果的。
  • 关于Erlang/OTP的application参数配置_第2张图片
  • 大小: 164 KB
  • 查看图片附件

你可能感兴趣的:(erlang,OTP,application)