开发者

Sharing [config] data across modules,functions

I have some configuration data in a config file that I read off disk when the app starts. I need to make that configuration data available to other functions/modules in the application. I started down the path of looking into ets/mnesia to store the data on startup to make it shared among all processes, but then my inner voice cautioned me that there must be a more functional, erlang-y way to do this. The only alternate approach I've come up with so far is setting up a module that has an actor loop that reads the data on startup and responds to messages like {Key, From} and responds by From ! {ok,Value}. Then, I gave up a开发者_Go百科nd decided to ask... Thanks, --tim


If what you need are just some configuration parameters, you might want to include them as environment variables (in Erlang terms) in one of your Erlang applications. The way to do this is to include them into the .app (or .app.src) file of your app, in the env tuple:

Something like:

{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"}]}
 ]}.

SOURCE: http://www.erlang.org/doc/design_principles/applications.html

As you can see, the file is the config variable. You can access the variable by:

application:get_env(ch_app, file).

If what you need is something more complex, you might want to create a gen_server process that answer to all config requests (getter and setter methods).


Not to mention that any simple self-written solution involves reading the config file before starting the main supervisor as you may be needing these variables in there. Just a thought, but I ran into the same problem in my own code.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜