2010-03-24 7 views
4

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

ответ

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). 

Если то, что вам нужно что-то более сложным, вы можете создать серверный процесс, который ответит на все запросы конфигурации (методы получения и установки).

+0

Блестящий, спасибо Роберто, у меня есть простой gen_server, который теперь отвечает на мои вызовы конфигурации благодаря нелепому простому учебнику [1], который упростил его достаточно, чтобы даже я мог понять ... [1] - http: /20bits.com/articles/erlang-a-generic-server-tutorial/ – Tim

0

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

Смежные вопросы