Как заставить rebar / reltool уважать subdirs в ebin при создании релиза? - PullRequest
3 голосов
/ 14 ноября 2011

В моем приложении структура 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).

и т. Д.

rebar compile работает отлично и генерирует соответствующее дерево подкаталогов в 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.

Спасибо.

1 Ответ

3 голосов
/ 21 мая 2012

erlang хорошо поддерживает только плоские прикладные структуры. *

"Пакеты с тех пор, как они были выпущены более 5 лет назад, стали экспериментальной функцией. Используйте их на свой страх и риск, мы активно не поддерживаем и не развиваемэта функция. Однако она может быть когда-нибудь поддержана.

Несмотря на то, что пакеты работают достаточно хорошо, но есть некоторые известные проблемы в инструментах и ​​других частях, где пакеты не работают хорошо. "

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

...