Erlang сохраняет начальную конфигурацию приложения

Я работаю над приложением мониторинга, и я должен передать при запуске некоторую начальную конфигурацию, состоящую из нескольких списков IP-адресов. Какой способ OTP передать эти данные в приложение - через файл .app или есть ли какой-либо другой общепринятый способ?

Ответы

Ответ 1

Используйте файл конфигурации Erlang:

Файл конфигурации содержит значения параметров конфигурации для приложений в системе. Аргумент командной строки erl -config Имя указывает системе использовать данные в файле конфигурации системы Name.config.

Значения параметров конфигурации в файле конфигурации будут отменены значения в файлах ресурсов приложения (см. приложение (4)). Ценности в файле конфигурации можно переопределить флаги командной строки (см. Эрл (1)).

Значение параметра конфигурации извлекается при вызове Применение:. get_env/1,2

Если вам нужно переопределить их во время выполнения, вы можете использовать application:set_env/3, но с осторожностью.

Ответ 2

вы можете обрабатывать конфигурацию несколькими способами. здесь ссылка на другой stackoverflow тема

IMHO я предлагаю файл .app, или вы можете использовать конфигурационный файл (здесь другую ссылку на тему stackoverflow)

Ответ 3

Я бы создал имя gen_server-процесс, у которого есть список ip-адресов по мере его состояния. В инициализации сервера предопределенный список будет считываться из файла с помощью file: consult и использоваться в качестве начального состояния сервера. Чтобы получить список ip-адресов с этого имени gen_server, необходимо выполнить handle_call (get_ip, _From, State).

Таким образом, вы предотвращаете общее глобальное состояние, которое дает вам отличную карму Эрланга, и у нее есть лучшая отправная точка для добавления таких функций, как изменения времени работы в среде выполнения.

Ответ 4

Используйте файл, в котором у вас есть данные как термины erlang. Однако вам необходимо защитить файл. Чтение из файла при запуске: file:consult/1. Если изменение файла произойдет пользователем или системным администратором, используйте следующие функции для защиты или отказа от доступа к файлу:

-include_lib("kernel/include/file.hrl").

protect_file(File)-> 
    {_,File_info} = file:read_file_info(File),
    file:write_file_info(File,File_info#file_info{access = read,mode = 33060}).

unprotect_file(File)->
    {_,File_info} = file:read_file_info(File),
    file:write_file_info(File,File_info#file_info{access = read_write,mode = 33206}).

Используйте функцию protect_file/1, чтобы сделать файл доступным только для чтения. Если вам нужно сделать файл доступным для записи, измените его с помощью unprotect_file/1. Файл с терминами erlang проще, потому что вам не нужен синтаксический анализ. Вы также можете написать конфигурацию в виде JSON объектов или XML данных в файл. Таким образом, использование файла для всех ваших конфигураций будет лучше управляться вашим приложением и теми, кто с ним взаимодействует.

Примером является файл ejabberd.cfg, файл конфигурации для сервера ejabberd. Это проще всего с файлом с терминами erlang, потому что вы можете комментировать здесь и там, чтобы системный администратор мог видеть другие доступные параметры определенной конфигурации.