如何在发布时使 rebar/reltool 尊重 ebin 中的子目录?

发布于 2024-12-15 11:00:35 字数 1671 浏览 2 评论 0原文

在我的应用程序中,我的目录结构接近于以下内容:

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).

等等。

rebar 编译工作完美,并在 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 ()

My rebar-generate ebin/some_app.app does list all the required module:

{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]}]}.

Does Anybody Know how to make "rebargenerate"尊重ebin的子目录?我相信这也可能是 reltool 的问题。

谢谢。

In my app, I have dir structure close to the following:

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

Files that reside in subdirs (common, api etc) are namespaced in a usual package style.
For example, src/common/util.erl is declared as:

-module(common.util).

src/api/server.erl is declared as:

-module(api.server).

and so on.

rebar compile works perfectly and generates appropriate subdir tree in 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

But, rebar generate only copies top-level files to the rel dir:

rel/some_app/lib/some_app-0.0.2/ebin/
  some_app.beam
  some_server.beam
  something_else.beam
  some_app.app

Everything that resides in subdirs is not copied over to release. Thus, when I try to start generated release, I immediately get this kind of error message:

{"init terminating in do_boot",{'cannot load','api.server',get_files}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

My rebar-generated ebin/some_app.app does list all the required modules:

{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]}]}.

Does anybody know how to make "rebar generate" respect ebin's subdirs? I believe this could be reltool's problem as well.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彼岸花似海 2024-12-22 11:00:35

erlang 只很好地支持扁平应用程序结构·

“自从 5 年前推出以来,包一直是一个实验性功能。使用它需要您自担风险,我们不会积极维护和开发此功能。但是,它可能会受到某些支持 ”

尽管这个软件包工作得很好,但工具和其他部分存在一些已知问题,导致软件包无法正常工作。

http://www.erlang.org/doc/man/packages.html

Only flat application structures are well supported by erlang·

"Packages has since it was introduced more than 5 years ago been an experimental feature. Use it at your own risk, we do not actively maintain and develop this feature. It might however be supported some day.

In spite of this packages work quite well, but there are some known issues in tools and other parts where packages don't work well."

http://www.erlang.org/doc/man/packages.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文