Арматура: отсутствует каталог приложения
Я тестирую арматуру на
- Windows 8 64Bis
- Erlang 64bit R15B02
Я скомпилировал арматуру из кода GitHub и создал основное приложение
$ mkdir testapp; cd testapp
$ mkdir rel
$ rebar create-app appid=testapp
$ echo "{sub_dirs, ["rel"]}." > rebar.config
$ cd rel
$ rebar create-node nodeid=testnode
$ cd -
$ rebar compile
$ rebar generate
ERROR: generate failed while processing testapp/rel: {'EXIT',{{badmatch,{error,"testapp: : Missing application directory."}
...
Я читаю документацию reltool, но я не могу найти что-либо о приложении dir, единственная соответствующая опция incl_cond
но определяется по умолчанию rebar
команда
SRC /testapp.app.src
{application, testapp,
[
{description, ""},
{vsn, "1"},
{registered, []},
{applications, [
kernel,
stdlib
]},
{mod, { testapp_app, []}},
{env, []}
]}.
отн /reltool.config
{sys, [
{lib_dirs, []},
{erts, [{mod_cond, derived}, {app_file, strip}]},
{app_file, strip},
{rel, "testapp", "1",
[
kernel,
stdlib,
sasl,
testapp
]},
{rel, "start_clean", "",
[
kernel,
stdlib
]},
{boot_rel, "testapp"},
{profile, embedded},
{incl_cond, derived},
{mod_cond, derived},
{excl_archive_filters, [".*"]}, %% Do not archive built libs
{excl_sys_filters, ["^bin/.*", "^erts.*/bin/(dialyzer|typer)",
"^erts.*/(doc|info|include|lib|man|src)"]},
{excl_app_filters, ["\.gitignore"]},
{app, testapp, [{mod_cond, app}, {incl_cond, include}]}
]}.
{target_dir, "testapp"}.
{overlay, [
{mkdir, "log/sasl"},
{copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"},
{copy, "files/nodetool", "\{\{erts_vsn\}\}/bin/nodetool"},
{copy, "files/testapp", "bin/testapp"},
{copy, "files/testapp.cmd", "bin/testapp.cmd"},
{copy, "files/start_erl.cmd", "bin/start_erl.cmd"},
{copy, "files/install_upgrade.escript", "bin/install_upgrade.escript"},
{copy, "files/sys.config", "releases/\{\{rel_vsn\}\}/sys.config"},
{copy, "files/vm.args", "releases/\{\{rel_vsn\}\}/vm.args"}
]}.
3 ответа
Это может помочь вам. (цитируется ниже в случае, если исходная ссылка исчезает)
Не совсем уверен, в чем причина этого изменения для версий, следующих за R15B01, хотя.
Благодаря Siri, reltool в R15B01 имеет действительно полезную функцию.
Многие проекты Erlang используют следующую структуру:
./src/foo.app.src
./src/foo.erl
./rel/reltool.configКогда вы хотели сослаться на приложение foo в rel / reltool.config, ранее у вас было три варианта:
* локальная библиотека проекта / или каталог приложений /
* unsafe {lib_dirs, "../.."} параметр reltool.config
* rebar_reltool_link плагин fake_lib_dirНачиная с R15B01, все, что вам нужно сделать, это указать
{app, foo, [{incl_cond, include}, {lib_dir, ".."}]}
в reltool.config для приложений не в lib_dirs.Хотя R15B01 все еще находится в разработке, эта функция является полной и может использоваться в ветке otp.git maint.
В моем случае мне пришлось изменить по умолчанию rel/reltool.config
линия
{lib_dirs, []},
в
{lib_dirs, ["../../"]},
Где макет моего проекта:
Makefile
ebin/
rebar.config
rel/
src/
См. Это руководство, https://github.com/rebar/rebar/wiki/Release-handling
Если вы используете R15B01 или более новое изменение,
{app, instancelar, [{mod_cond, app}, {incl_cond, include}, {lib_dir, ".."}]}
Вышеупомянутый способ упоминания пути решил проблему с каталогом приложения.