Как я могу включить файл ".mustache" в выпуск erlang?

Я пытаюсь использовать усы erlang lib с отдельным шаблоном и представлением. Я использую структуру релиза rebar3.

Я следую примеру в документации, если я создаю оба simple.erl а также simple.mustache, Тем не менее, когда я выполняю rebar3 compileмой окончательный каталог ebin включает только simple.beam,

Как я могу убедиться, что процесс компиляции / выпуска связывает simple.mustache файл?

Вот макет моих приложений:

Вот мой rebar.config:

{erl_opts, [debug_info]}.
{deps, [
    {cowboy, {git, "git://github.com/ninenines/cowboy.git", {tag, "1.0.1"}}},
  {mustache, {git, "git@github.com:mojombo/mustache.erl.git", {tag, "v0.1.1"}}}
]}.

{relx, [{release, { kitty, "0.1.0" },
         [kitty,
          kitty_api,
          sasl]},

        {sys_config, "./config/sys.config"},
        {vm_args, "./config/vm.args"},

        {dev_mode, true},
        {include_erts, false},

        {extended_start_script, true}]
}.

{profiles, [{prod, [{relx, [{dev_mode, false},
                            {include_erts, true}]}]
            }]
}.

Вот мой kitty_api_app.src, который содержит simple.mustache в это src реж:

{application, kitty_api,
 [{description, "Kitty HTTP API"},
  {vsn, "0.1.0"},
  {registered, []},
  {mod, { kitty_api_app, []}},
  {applications,
   [kernel,
    stdlib,
    kitty,
    cowboy
   ]},
  {env,[]},
  {modules, []},

  {maintainers, []},
  {licenses, []},
  {links, []}
 ]}.

2 ответа

Решение

Erlang/OTP Применение Перспектива

В соответствии с главой " Структура каталогов" в Принципах разработки OTP приложение Erlang состоит из следующих подкаталогов:

src - содержит исходный код Erlang.
ebin - содержит объектный код Erlang, файлы лучей. Файл.app также находится здесь.
priv - Используется для файлов конкретного приложения. Например, исполняемые файлы C размещены здесь. Код функции:priv_dir/1 должен использоваться для доступа к этому каталогу.
include - используется для включаемых файлов

Несмотря на это, не следует помещать файлы, которые не являются исходным кодом, в src/ каталог. Priv/ это правильное место, чтобы положить их в.

Rebar3 перспектива

Документация команды compile в rebar3 гласит:

Убедившись, что все зависимости доступны, (...) compile скомпилирует необходимые зависимости и файлы.app.src и.erl приложений проекта.

Что соответствует принципам разработки OTP. Как ваш файл усов, который находится в src/ не является .app.src файл или файл.erl, арматура ничего с этим не делает.

Erlang/OTP Release перспективный

И, наконец, упомянутый выше документ OTP говорит об релизах Erlang:

Структура каталогов для кода, установленного обработчиком выпуска из пакета выпуска, выглядит следующим образом:

$ROOT/lib/App1-AVsn1/ebin  
                    /priv  
        /App2-AVsn2/ebin
                   /priv
        ...
       /AppN-AVsnN/ebin
                  /priv
       /erts-EVsn/bin
       /releases/Vsn
       /bin

Как видите, только ebin/ а также priv/ Ожидается, что они будут размещены в приложении, которое является частью релиза, поэтому оставляя .mustache файл в src/ это не вариант.

Заключение

.mustache файлы должны рассматриваться как специфичные для приложения файлы и, таким образом, помещаться в приложение priv/ каталог. Если помещено в src/, арматура не будет копировать их в ebin/, При создании релиза приложения, из которых он состоит, копируются вместе с их priv каталоги.

Только beam файлы и app/appup файл должен быть действительно в ebin папка. Вы можете разместить .mustache файл в priv папка? скоросшиватель priv должны быть скопированы автоматически. Если не ожидается, что .mustache файл должен быть скомпилирован в .erl файл, а затем к beam файл, как это имеет место с некоторыми другими исходными файлами, связанными с Erlang, которые не совсем .erl файлы. Я не знаю много о mustache порт для Erlang, но похоже, что он пытается сделать что-то нестандартным способом, который может быть не переносимым между системами и инструментами выпуска.

Другие вопросы по тегам