Как я могу включить файл ".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, но похоже, что он пытается сделать что-то нестандартным способом, который может быть не переносимым между системами и инструментами выпуска.