跨模块,功能共享[config]数据

时间:2010-03-24 15:30:41

标签: erlang

我在配置文件中有一些配置数据,我在应用启动时读取磁盘。我需要将该配置数据提供给应用程序中的其他功能/模块。我开始研究ets / mnesia的路径,以便在启动时存储数据,使其在所有进程之间共享,但随后我内心的声音提醒我必须有更多功能性的erlang-y方式来实现这一点。到目前为止,我唯一提出的替代方法是设置一个模块,该模块具有一个actor循环,它在启动时读取数据并响应{Key,From}等消息并通过From响应! {OK,值}。然后,我放弃了,决定问...... 谢谢, --tim

2 个答案:

答案 0 :(得分:4)

如果您需要的只是一些配置参数,您可能希望将它们作为环境变量(在Erlang术语中)包含在您的一个Erlang应用程序中。这样做的方法是将它们包含在应用程序的.app(或.app.src)文件中,在env元组中:

类似的东西:

{application, ch_app,
 [{description, "Channel allocator"},
  {vsn, "1"},
  {modules, [ch_app, ch_sup, ch3]},
  {registered, [ch3]},
  {applications, [kernel, stdlib, sasl]},
  {mod, {ch_app,[]}},
  {env, [{file, "/usr/local/log"}]}
 ]}.

消息来源:http://www.erlang.org/doc/design_principles/applications.html

如您所见,file是配置变量。 您可以通过以下方式访问变量:

application:get_env(ch_app, file).

如果你需要的是更复杂的东西,你可能想要创建一个响应所有配置请求的gen_server进程(getter和setter方法)。

答案 1 :(得分:0)

更不用说任何简单的自编解决方案都涉及在启动主管理器之前读取配置文件,因为您可能需要这些变量。只是一个想法,但我在自己的代码中遇到了同样的问题。

相关问题