在我的应用中,我的dir结构接近以下内容:
src/
api/
server.erl
model.erl
common/
common_stuff.erl
util.erl
some_app.erl
some_server.erl
something_else.erl
some_app.app.src
驻留在子目录(common,api等)中的文件以通常的包样式命名。 例如,src / common / util.erl声明为:
-module(common.util).
src / api / server.erl声明为:
-module(api.server).
等等。
钢筋编译完美无缺,并在ebin中生成适当的子树:
ebin/
api/
server.beam
model.beam
common/
common_stuff.beam
util.beam
some_app.beam
some_server.beam
something_else.beam
some_app.app
但是,rebar只生成顶级文件复制到rel目录:
rel/some_app/lib/some_app-0.0.2/ebin/
some_app.beam
some_server.beam
something_else.beam
some_app.app
驻留在子目录中的所有内容都不会复制到发布中。因此,当我尝试启动生成的版本时,我立即收到此类错误消息:
{"init terminating in do_boot",{'cannot load','api.server',get_files}}
Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
我的钢筋生成的ebin / some_app.app确实列出了所有必需的模块:
{application,some_app,
[{description,"0.0.2"},
{vsn,"0.0.2"},
{registered,[]},
{applications,[kernel,stdlib,sasl]},
{mod,{some_app,[]}},
{env,[]},
{modules,['api.server','api.model','common.common_stuff',
'common.util', some_app, some_server,
something_else]}]}.
有谁知道如何让“钢筋生成”尊重ebin的子目录?我相信这也可能是reltool的问题。
感谢。
答案 0 :(得分:3)
erlang·
仅支持平面应用程序结构“套装自5年前推出以来一直是一个实验性功能。使用它需要您自担风险,我们不会主动维护和开发此功能。但有一天可能会支持它。
尽管这些软件包工作得很好,但是工具和其他部件中存在一些已知的问题,其中软件包无法正常运行。“