我正在尝试将mustache 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, []}
]}.
:
cin
答案 0 :(得分:4)
根据OTP设计原则中的Directory Structure章节,Erlang应用程序包含以下子目录:
src - 包含Erlang源代码 ebin - 包含Erlang对象代码,梁文件。 .app文件也放在这里。
priv - 用于特定于应用程序的文件。例如,C可执行文件 放在这里。功能代码:priv_dir / 1用于访问此目录。
include - 用于包含文件
从表面上看,将不是源代码的文件放到src/
目录中是不合适的。 priv /是把它们放进去的合适的地方。
The documentation of compile command in rebar3说:
确保所有依赖项都可用后,(...)compile将编译所需的depdendencies和项目的应用程序.app.src和.erl文件。
其中编译了OTP设计原则。由于位于src/
的小胡子文件既不是.app.src
文件也不是.erl文件,因此钢筋对它没有任何作用。
最后,上述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
文件保留在{{1}中不是一个选项。
src/
文件应视为特定于应用程序的文件,因此应放在应用程序.mustache
目录中。如果放在priv/
中,螺纹钢不会将它们复制到src/
。构建版本时,构成它的应用程序将与其ebin/
目录一起复制。
答案 1 :(得分:2)
只有textinputlayout.seterror(null)
个文件和beam
/ app
文件应该在appup
文件夹中。您可以将ebin
文件放在.mustache
文件夹中吗?应自动复制文件夹priv
。除非预期priv
文件应编译为.mustache
文件,然后编译为.erl
文件,因为其他一些与Erlang相关的源文件就是这种情况。不完全是beam
个文件。我对Erlang的.erl
端口了解不多,但看起来它试图以非标准的方式做某事,这可能无法跨系统和发布工具移植。< / p>