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