Как указать каталог для mnesia в ковбойском приложении?

Есть ли способы указать путь к схеме в ковбойском приложении? Может быть, это можно установить в my_app.app.src или любом конфигурационном файле?

2 ответа

Решение

Путь к каталогу mnesia должен быть предоставлен erlang VM до запуска приложения mnesia через параметры конфигурации приложения. В учебнике Mnesia это делается с помощью -Application par val Синтаксис аргументов VM.

То, что вы называете ковбойским приложением, вероятно, является выпуском Erlang OTP (созданным relx согласно руководству по ковбою). Решения, быстро описанные в выпуске Cowboy № 595, заключаются в следующем.

Выбор между решениями действительно зависит от стиля, а также от некоторых ограничений. Любой достаточно сложный выпуск будет использовать файл конфигурации, так что это будет хорошим выбором. vm.args кажется, легче иметь дело с. В конце концов вам может понадобиться изменить стартовый скрипт (например, для запуска нескольких узлов из одного развертывания) и включить некоторую логику для определения каталога mnesia.

Предоставьте relx с файлом конфигурации (опция sys_config)

Для этого добавьте следующий термин в relx.config как задокументировано.

{sys_config, "./config/sys.config"}.

sys.config на самом деле это стандартный файл конфигурации Erlang, также задокументированный. Указание Mnesia Dir выполняется путем добавления раздела для приложения Mnesia. Если никакая другая конфигурация не требуется, файл будет:

[{mnesia, [{dir, "/path/to/dir"}]}].

Получить relx для передачи аргументов в vm (опция vm_args)

vm.args файл фактически передается на виртуальную машину через -args_file вариант. Это простой текстовый файл с аргументами.

Вы бы добавили следующий термин в relx.config как задокументировано.

{vm_args, "./config/vm.args"}.

И поместите следующее содержание в vm.args файл:

-mnesia dir foo

Напишите свой собственный стартовый скрипт

relx на самом деле создает стартовый скрипт, который проходит -config sys.config а также args_file vm.args на ВМ по мере необходимости. Вы можете изменить этот скрипт или свернуть свой собственный, чтобы фактически передать -mnesia dir аргумент к В.М.

В случае vm.args, planit text -mnesia dir foo недопустим, используйте формат: -mnesia {dir,foo}

Другие вопросы по тегам