• 配置应用

    配置应用

    可以使用配置参数来对应用进行配置。它们在 .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"}