Совместное использование [config] данных между модулями, функциями - PullRequest
4 голосов
/ 24 марта 2010

У меня есть некоторые данные конфигурации в файле конфигурации, которые я считываю с диска при запуске приложения. Мне нужно сделать эти данные конфигурации доступными для других функций / модулей в приложении. Я начал изучать ets / mnesia для хранения данных при запуске, чтобы сделать их общими для всех процессов, но затем мой внутренний голос предупредил меня о том, что для этого должен быть более функциональный, эргономичный способ. Единственный альтернативный подход, который я до сих пор предлагал, - это установка модуля, который имеет цикл акторов, который считывает данные при запуске и отвечает на сообщения типа {Key, From} и отвечает From! {Ок, Value}. Затем я сдался и решил спросить ... Спасибо, --tim

Ответы [ 2 ]

4 голосов
/ 24 марта 2010

Если вам нужны только некоторые параметры конфигурации, вы можете включить их в качестве переменных среды (в терминах 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, который отвечает на все запросы конфигурации (методы получения и установки).

0 голосов
/ 25 марта 2010

Не говоря уже о том, что любое простое решение, написанное самостоятельно, предполагает чтение файла конфигурации перед запуском основного супервизора, поскольку вам могут понадобиться эти переменные. Просто мысль, но я столкнулся с той же проблемой в своем собственном коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...