如何在erlang版本中包含“.mustache”文件?

时间:2016-03-26 05:35:35

标签: erlang rebar relx

我正在尝试将mustache erlang lib与单独的模板和视图一起使用。我正在使用rebar3发布结构。

如果我创建了simple.erlsimple.mustache,我会按照文档中的示例进行操作。但是,当我执行rebar3 compile时,我的最终ebin目录只包含simple.beam

如何确保编译/发布过程捆绑simple.mustache文件?

以下是我的应用的布局:

enter image description here

这是我的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

2 个答案:

答案 0 :(得分:4)

Erlang / OTP应用程序透视

根据OTP设计原则中的Directory Structure章节,Erlang应用程序包含以下子目录:

  

src - 包含Erlang源代码   ebin - 包含Erlang对象代码,梁文件。 .app文件也放在这里。
   priv - 用于特定于应用程序的文件。例如,C可执行文件   放在这里。功能代码:priv_dir / 1用于访问此目录。
  include - 用于包含文件

从表面上看,将不是源代码的文件放到src/目录中是不合适的。 priv /是把它们放进去的合适的地方。

Rebar3透视

The documentation of compile command in rebar3说:

  

确保所有依赖项都可用后,(...)compile将编译所需的depdendencies和项目的应用程序.app.src和.erl文件

其中编译了OTP设计原则。由于位于src/的小胡子文件既不是.app.src文件也不是.erl文件,因此钢筋对它没有任何作用。

Erlang / OTP Release perspetive

最后,上述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>