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

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