我想知道reltool的以下行为背后的原因是什么:
如果我reltool.config使用默认mod_cond和incl_cond选项,并且我的一个包含的应用程序有一个模块,它也恰好是我的机器上安装的某个应用程序的一部分但未包含在我的发行版reltool中:get_target_spec/1返回:
{error, "Module <some_module> potentially included by two different applications: <system_app> and <my_app>."}
这很烦人,因为<system_app>它不是我发布的一部分(既不直接也不间接).难道reltool实际上<system_app>不知道我的发布中不会包含这些内容吗?这是为什么会这样"potentially included"?
无论如何,为了生成我的版本,我必须明确地排除<system_app>通过{app, <system_app> [{incl_cond, exclude}]}哪个是丑陋的,因为这<system_app>恰好安装在root_dir我进行构建的机器的Erlang/OTP系统中(它可能不安装在其他建立机器)并与我的发布无关.实际示例:tsung-1.4.3包含mochijson2模块,因此我在构建自己的版本时遇到问题,该版本应该包含mochiweb已tsung安装的计算机上的应用程序(但不包括在其他计算机上).另一种选择是改变顶级incl_cond的{incl_cond, derived}到{incl_cond, exclude},然后手动包括我想成为一个部分我的版本,这是更好(将任何构建机器上工作),但仍然不是很大,因为它有(我必须手动完成所有的应用想依靠relltool找出依赖关系).
所以问题是为什么我们有这样的情况呢?为什么仅仅在构建机器上存在某些应用程序会导致上述reltool错误?
PS作为附注,我相信当前版本的reltool_server.erl的第907-909行包含一个错误:bad argument如果它被调用它将生成它.
我正在测试螺纹钢
我从github代码编译了rebar并创建了一个基本应用程序
$ 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."}
...
Run Code Online (Sandbox Code Playgroud)
我正在阅读reltool文档,但我无法找到有关应用程序目录的任何内容,唯一相关的选项是incl_cond默认情况下由rebar命令定义
{application, testapp,
[
{description, ""},
{vsn, "1"},
{registered, []},
{applications, [
kernel,
stdlib
]},
{mod, { testapp_app, []}},
{env, []} …Run Code Online (Sandbox Code Playgroud) Elixir&Mix都希望将服务器作为守护进程.一直未能找到正确的方法.
另外,我想使用erlang reltool.
大家.
我有一个打包的erlang应用程序 rebar generate
这是我的reltool.config:
{sys, [
{lib_dirs, ["../../..", "../../deps"]},
{erts, [{mod_cond, derived}, {app_file, strip}]},
{app_file, strip},
{rel, "collector", "1",
[
kernel,
stdlib,
sasl,
collector
]},
{rel, "start_clean", "",
[
kernel,
stdlib
]},
{boot_rel, "collector"},
{profile, embedded},
{incl_cond, exclude},
{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, sasl, [{incl_cond, include}]},
{app, stdlib, [{incl_cond, include}]},
{app, kernel, [{incl_cond, include}]},
{app, lager, [{incl_cond, include}]},
{app, goldrush, [{incl_cond, include}]},
{app, meck, [{incl_cond, include}]},
{app, mnesia, [{incl_cond, …Run Code Online (Sandbox Code Playgroud)