首页 文章

钢筋:缺少应用程序目录

提问于
浏览
5

我正在测试螺纹钢

  • Windows 8 64Bis

  • Erlang 64bits R15B02

我从github代码编译了rebar并创建了一个基本应用程序

$ mkdir testapp; cd testapp
$ mkdir rel
$ rebar create-app appid=testapp
$ echo "{sub_dirs, ["rel"]}." > rebar.config
$ cd rel
$ rebar create-node nodeid=testnode
$ cd -
$ rebar compile
$ rebar generate    
ERROR: generate failed while processing testapp/rel: {'EXIT',{{badmatch,{error,"testapp: : Missing application directory."}
...

我正在阅读reltool文档,但我无法找到有关应用程序目录的任何内容,唯一相关的选项是 incl_cond 但是默认情况下由 rebar 命令定义

src / testapp.app.src

{application, testapp,
 [
  {description, ""},
  {vsn, "1"},
  {registered, []},
  {applications, [
                  kernel,
                  stdlib
                 ]},
  {mod, { testapp_app, []}},
  {env, []}
 ]}.

rel / reltool.config

{sys, [
       {lib_dirs, []},
       {erts, [{mod_cond, derived}, {app_file, strip}]},
       {app_file, strip},
       {rel, "testapp", "1",
        [
         kernel,
         stdlib,
         sasl,
         testapp
        ]},
       {rel, "start_clean", "",
        [
         kernel,
         stdlib
        ]},
       {boot_rel, "testapp"},
       {profile, embedded},
       {incl_cond, derived},
       {mod_cond, derived},
       {excl_archive_filters, [".*"]}, %% Do not archive built libs
       {excl_sys_filters, ["^bin/.*", "^erts.*/bin/(dialyzer|typer)",
                           "^erts.*/(doc|info|include|lib|man|src)"]},
       {excl_app_filters, ["\.gitignore"]},
       {app, testapp, [{mod_cond, app}, {incl_cond, include}]}
      ]}.

{target_dir, "testapp"}.

{overlay, [
           {mkdir, "log/sasl"},
           {copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"},
           {copy, "files/nodetool", "\{\{erts_vsn\}\}/bin/nodetool"},
           {copy, "files/testapp", "bin/testapp"},
           {copy, "files/testapp.cmd", "bin/testapp.cmd"},
           {copy, "files/start_erl.cmd", "bin/start_erl.cmd"},
           {copy, "files/install_upgrade.escript", "bin/install_upgrade.escript"},
           {copy, "files/sys.config", "releases/\{\{rel_vsn\}\}/sys.config"},
           {copy, "files/vm.args", "releases/\{\{rel_vsn\}\}/vm.args"}
          ]}.

3 回答

  • 4

    This might help you . (如果原始链接消失,引用如下)

    不完全确定R15B01之后的版本更改的原因是什么 .

    感谢Siri,R15B01中的reltool包含了一个非常有用的功能 . 许多Erlang项目使用以下结构:./ src /foo.app.src ./src/foo.erl ./rel/reltool.config当你想在rel / reltool.config中引用应用程序foo时,你以前有过三个选项:项目本地库/或应用程序/目录不安全{lib_dirs,“../ ..”} reltool.config设置* rebar_reltool_link fake_lib_dir插件从R15B01开始,您现在要做的就是指定{app,foo,不在lib_dirs中的应用程序的reltool.config中的[{incl_cond,include},{lib_dir,“..”}]} . 虽然R15B01仍在开发中,但此功能已完成,可以在otp.git maint分支中使用 .

  • 7

    在我的情况下,我不得不修改默认的 rel/reltool.config

    {lib_dirs, []},
    

    {lib_dirs, ["../../"]},
    

    我项目的布局是:

    Makefile
    ebin/   
    rebar.config
    rel/    
    src/
    
  • 1

    参考本指南,https://github.com/rebar/rebar/wiki/Release-handling

    如果您正在使用R15B01或更新,

    {app,exemplar,[{mod_cond,app},{incl_cond,include},{lib_dir,“..”}}}

    以上提到路径的方式解决了我找不到应用程序目录的问题 .

相关问题