Erlang存储初始应用程序配置

时间:2011-07-19 14:23:52

标签: erlang

我正在开发一个监控应用程序,我必须在启动时传入一些初始配置,其中包含几个IP地址列表。将这些数据传递给应用程序的OTP方式是什么 - 通过.app文件还是有其他普遍接受的方式?

4 个答案:

答案 0 :(得分:8)

使用Erlang configuration file

  

配置文件包含配置参数的值   系统中的应用程序。 erl命令行参数-config   Name告诉系统使用系统配置文件中的数据   Name.config。

     

配置文件中的配置参数值将覆盖   应用程序资源文件中的值(请参阅app(4))。价值   在配置文件中可以通过命令行标志覆盖(请参阅   ERL(1))。

     

通过调用检索配置参数的值   应用:get_env / 1,2

如果您需要在运行时覆盖它们,可以使用application:set_env/3,但要小心。

答案 1 :(得分:1)

您可以通过多种方式处理配置。 这里是另一个stackoverflow topic

的链接

恕我直言我建议.app文件,或者您可以使用配置文件(here另一个指向stackoverflow主题的链接)

答案 2 :(得分:0)

我会创建一个名称gen_server进程,其中包含一个ip地址列表作为其状态。在服务器的init中,将使用file:consult从文件中读取预定义列表,并将其用作服务器的初始状态。要从此命名的gen_server获取IP地址列表,需要执行handle_call(get_ip,_From,State)。

通过这种方式,您可以防止共享的全局状态,从而为您提供出色的Erlang业力,并为运行时IP地址更改等附加功能提供更好的起点。

答案 3 :(得分:0)

使用您将数据作为erlang术语的文件。但是,您需要保护文件。在启动时从文件中读取使用:file:consult/1。如果用户或系统管理员将对文件进行修改,请使用以下功能来保护或拒绝访问该文件:

-include_lib("kernel/include/file.hrl").

protect_file(File)-> 
    {_,File_info} = file:read_file_info(File),
    file:write_file_info(File,File_info#file_info{access = read,mode = 33060}).

unprotect_file(File)->
    {_,File_info} = file:read_file_info(File),
    file:write_file_info(File,File_info#file_info{access = read_write,mode = 33206}).

使用函数protect_file/1将文件设为只读。如果您需要使文件可写,则使用unprotect_file/1进行修改。具有erlang术语的文件更容易,因为您不需要解析。您还可以将配置作为JSON对象或XML数据写入文件。总之,您的应用程序以及与之交互的人员可以更好地管理所有配置文件。

一个例子是ejabberd.cfg文件,ejabberd服务器的配置文件。对于带有erlang术语的文件最简单,因为您可以在这里和那里进行评论,以便系统管理员查看有关特定配置的其他可用选项。