Как правильно загрузить пути кодов зависимостей в приложении Erlang.
Таким образом, предполагая, что у меня есть структура приложения арматуры и в папке deps, у меня есть ряд зависимостей, некоторые из них - библиотечные приложения, а некоторые - приложения, которые необходимо запустить. Я обычно делаю это так:
start(_Type, _Args) ->
code:add_path("../deps/depapp/ebin"),
{ok, _} = application:ensure_all_started(depapp),
Это правильный способ сделать это в среде разработки? Как насчет производства?
1 ответ
То, что вы использовали, не обязательно является неправильным способом, но может выявить некоторые проблемы. Например, таким образом, у вас нет выбора для запуска зависимых приложений, которые должны быть запущены до вашего приложения.
Так что есть и другие альтернативы loading
или же starting
зависимые приложения или библиотеки OTP.
1) Использование erl
флаги командной строки:
erl -pa ebin deps/*/ebing -s your_dep_app start -s your_app start
2) Использование менеджера пакетов для его обработки:
В качестве примера Rebar как менеджер пакетов может справиться с этим за вас. Что вам нужно, это указать зависимости вашего приложения в rebar.config
а затем выпустить rebar get-deps
для Rebar2 или rebar3 compile
для Rebar3. Ниже приведен фрагмент примера файла конфигурации для Rebar3:
{deps,[
%% Packages
rebar,
{rebar,"1.0.0"},
{rebar, {pkg, rebar_fork}}, % rebar app under a different pkg name
{rebar, "1.0.0", {pkg, rebar_fork}},
%% Source Dependencies
{rebar, {git, "git://github.com/erlang/rebar3.git"}},
{rebar, {git, "http://github.com/erlang/rebar3.git"}}]}.
Для получения дополнительной информации о Rebar зависимом менеджере взгляните на эту ссылку.
Также для запуска или загрузки их с помощью Rebar вы можете сделать релиз и позволить Rebar запускать или загружать их. Ниже приведен фрагмент примера файла конфигурации Rebar для создания релиза:
{relx, [
{release,
{your_app, "0.1.0"},
[your_dep_app_1,
{your_dep_app_2, load}]}]}.
Этот конфиг загружается и запускается your_dep_app_1
но просто загружает your_dep_app_2
, Для получения дополнительной информации о менеджере релизов Rebar перейдите по этой ссылке.