Как указать каталог для 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}