2009-12-03 3 views
6

Как указать рабочий каталог для mnesia, не прибегая к передаче параметра «dir» в командной строке?Erlang: указав рабочий каталог для mnesia?

Другими словами, могу ли я указать «рабочий каталог» для mnesia непосредственно перед вызовом `mnesia: start() '?

ответ

12

application:set_env(mnesia, dir, Dir).

+1

В Erlang VM запущен процесс application_controller. 'application_controller: set_env' - это« API »для этого процесса. 'application: set_env' - более абстрактный вызов, который просто касается приложений. Неудивительно, что в настоящее время он только вызывает этот API. – Zed

+1

Чтобы ответить на вопрос :), я считаю, что существование сервера и модуля application_controller следует рассматривать как «деталь реализации», и поэтому правильным способом является использование прикладного модуля. – Zed

+0

@zed: согласился с вашей предыдущей точкой. – jldupont

2

Помимо упомянутых в других ответах вызова метода здесь вы также можете указать это в файле конфигурации системного файла или .app указанного с -config параметром. См. http://erlang.org/doc/design_principles/applications.html#id2270704 для получения дополнительной информации. Это позволяет сохранить конфигурацию отдельно от кода и избежать большого количества флагов командной строки.

+0

У меня подобная ситуация ... и я не хочу устанавливать mnesia dir изнутри кода ... Можете ли вы объяснить, как файл .app приложения должен использоваться для установки переменной env для другого приложения. Я понимаю, как это можно сделать, используя файл .config. например Мой файл приложения - test.app, и у него была mnesia, указанная в разделе «приложения», поэтому mnesia запускается автоматически, когда я запускаю «тест». Как передать значение «dir» в mnesia с помощью test.app? – spkhaira

+0

соответствующая документация для этого находится здесь: http://www.erlang.org/doc/man/app.html, в частности, env tuple в спецификации файла приложения. все, что вы можете установить с помощью set_env(), также можно установить там или в командной строке. –

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