2010-03-24 56 views
4

我在配置文件中有一些配置数据,当应用程序启动时我从磁盘中读取数据。我需要将该配置数据提供给应用程序中的其他功能/模块。我开始研究ets/mnesia以便在启动时存储数据,以便在所有进程之间共享数据,但接下来我内心的声音告诫我必须有一种更实用的erlang-y方式来执行此操作。到目前为止,我提出的唯一替代方法是建立一个模块,该模块具有一个在启动时读取数据并响应诸如{Key,From}之类的消息并由From发出响应的actor循环。 {OK,值}。于是,我放弃了,决定问... 谢谢, --tim在模块之间共享[config]数据,功能

回答

4

如果你需要的只是一些配置参数,你可能要包括他们作为环境变量(二郎计算)之一你的Erlang应用程序。做到这一点的方法是将其包含到。应用程序(或.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方法)。

+0

辉煌,感谢罗伯托,我现在有一个简单的gen_server现在回答我的配置调用感谢一个简单的教程[1],它足够简化,甚至我可以明白... [1] - http:/ /20bits.com/articles/erlang-a-generic-server-tutorial/ – Tim 2010-03-24 16:45:32

0

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