5

鉄筋をテストしています

  • Windows 8 64Bis
  • Erlang64ビット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のドキュメントを読んでいますが、application dirについて何も見つかりません。関連する唯一のオプションは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"}
          ]}.
4

3 に答える 3

7

私の場合、デフォルトのrel/reltool.config行を変更する必要がありました

   {lib_dirs, []},

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

私のプロジェクトのレイアウトは次のとおりです。

Makefile
ebin/   
rebar.config
rel/    
src/
于 2013-10-06T09:48:00.017 に答える
4

これはあなたを助けるかもしれません(元のリンクが消えた場合に備えて、以下に引用)

ただし、R15B01以降のバージョンでその変更が行われた理由は正確にはわかりません。

Siriのおかげで、R15B01のreltoolには本当に便利な機能が含まれています。

多くのErlangプロジェクトは次の構造を使用しています: ./ src /
foo.app.src
./src/foo.erl
./rel/reltool.config

rel / reltool.configでアプリケーションfooを参照する場合、以前は3つのオプションがありました。
*プロジェクトローカルlibs/またはapps/ディレクトリ
*安全でない{lib_dirs、"../.."}reltool.config設定
*rebar_reltool_link fake_lib_dirプラグイン

R15B01以降、lib_dirsに ないアプリケーションの場合
は、reltool.configで{app、foo、[{incl_cond、include}、{lib_dir、".."}]}
を指定するだけです。

R15B01はまだ開発中ですが、この機能は完全であり、otp.gitmaintブランチで使用できます。

于 2012-11-21T06:55:31.337 に答える
1

このガイドライン、 https://github.com/rebar/rebar/wiki/Release-handlingを参照してください

R15B01以降の変更を使用している場合は、

{app、exemplar、[{mod_cond、app}、{incl_cond、include}、{lib_dir、 ".."}]}

上記のパスの言及方法は、アプリケーションディレクトリが見つからないという問題を解決しました。

于 2015-02-11T15:20:31.510 に答える