配置应用

可以使用配置参数来对应用进行配置。它们在 .app 文件中是一个由键 env 指定的 {Par,Val} 元组列表。

  1. {application, ch_app,
  2. [{description, "Channel allocator"},
  3. {vsn, "1"},
  4. {modules, [ch_app, ch_sup, ch3]},
  5. {registered, [ch3]},
  6. {applications, [kernel, stdlib, sasl]},
  7. {mod, {ch_app,[]}},
  8. {env, [{file, "/usr/local/log"}]}
  9. ]}.

Par 必须是一个原子, Val 可以是任意值。应用可以通过调用 application:get_env(App,Par) 或一些其他类似函数来获取配置参数的值,参见 application(3)

例如:

  1. % erl
  2. Erlang (BEAM) emulator version 5.2.3.6 [hipe] [threads:0]
  3.  
  4. Eshell V5.2.3.6 (abort with ^G)
  5. 1> application:start(ch_app).
  6. ok
  7. 2> application:get_env(ch_app, file).
  8. {ok,"/usr/local/log"}

.app 文件中的值可以被系统配置文件中的值所覆盖。系统配置文件是一个包含相关应用的配置参数的文件。

  1. [{Application1, [{Par11,Val11},...]},
  2. ...,
  3. {ApplicationN, [{ParN1,ValN1},...]}].

系统配置要被命名为 Name.config 并且要使用命令行参数 -configName 来启动Erlang。更多信息参见 config(4)

例如:创建一个文件 test.config 包含一下内容:

  1. [{ch_app, [{file, "testlog"}]}].

file 的值将覆盖在 .app 文件中所定义的 file 的值:

  1. % erl -config test
  2. Erlang (BEAM) emulator version 5.2.3.6 [hipe] [threads:0]
  3.  
  4. Eshell V5.2.3.6 (abort with ^G)
  5. 1> application:start(ch_app).
  6. ok
  7. 2> application:get_env(ch_app, file).
  8. {ok,"testlog"}

如果使用了 发布处理 ,那么只能使用一个系统配置文件同时该文件必须叫做 sys.config

.app 文件中的值,也包括系统配置文件中的值,都可以直接在命令行中被覆盖:

  1. % erl -ApplName Par1 Val1 ... ParN ValN

例如:

  1. % erl -ch_app file '"testlog"'
  2. Erlang (BEAM) emulator version 5.2.3.6 [hipe] [threads:0]
  3.  
  4. Eshell V5.2.3.6 (abort with ^G)
  5. 1> application:start(ch_app).
  6. ok
  7. 2> application:get_env(ch_app, file).
  8. {ok,"testlog"}