1

我正在使用 Reltool 构建一个版本。该应用程序需要配置文件才能启动。它使用以下函数读取配置文件:

read_config(Filename) ->
    {ok, [Config]} = file:consult(filename:join(
                                  [filename:dirname(code:which(?MODULE)),
                                   "..", "config", Filename])),
    Config.

使用配置文件以便 Reltool 构建工作版本的好方法是什么?

4

2 回答 2

3

如果您需要更专业的配置文件rebar,您可以将文件复制到您的版本中,例如。使用文件中的选项(不是标准配置选项)进入etc应用程序下的文件夹(默认rebar创建):etcoverlayreltool.configoverlayreltool

%% reltool.config
{overlay, [{copy, "../path/foo.config", "etc/foo.config"}, ...

您可以使用以下文件将配置文件作为参数传递给 vm vm.args

%% vm.args
-config etc/foo.config

您的启动脚本应该将 vm.args 文件作为参数传递给 vm(再次rebar生成一个自动执行此操作的脚本)。

该函数init:get_argument允许您向 vm 读取更专业的参数,例如:

%% vm.args
-very_special_config etc/foo.config

case init:get_argument(very_special_config) of
  {ok, Arg} -> Arg;
  _ -> fail
end
于 2012-05-01T05:24:57.217 回答
1

您不需要拥有自己的配置文件,除非它用于非常特殊的目的。如果您的配置文件因版本而异,您可以将这些不同的配置添加到您的<application>/ebin/<application>.app.

您可以将默认配置变量设置为<application>/ebin/<application>.app. 有关这方面的更多详细信息,请参阅http://www.erlang.org/doc/man/app.html

然后,您可以使用 application:get_env(<application_name>, <key>, <default_value>). 如果没有定义,也可以用application:set_env/3. 有关更多信息,请查看此http://www.erlang.org/doc/man/application.html

然后,您还可以通过定义覆盖这些应用程序变量<any_name_or_system_name>.config,然后在使用erl命令开始时使用该变量--config <file_name>.config。你可以看看这个启动命令选项,http://www.erlang.org/doc/man/erl.html

启动命令时,您还可以使用-<application> <key> <value>.

您还可以查看此应用程序的配置文件语法。 http://www.erlang.org/doc/man/config.html

一旦你成功地构建了一个 OTP 应用程序,它对你来说似乎很容易。

于 2012-04-30T23:01:09.843 回答