0

私はこのブログをフォローしています: http://maplekeycompany.blogspot.se/2012/03/very-basic-cowboy-setup.html

要するに、ブログの人物と同じように、rebar を使用してアプリケーションをコンパイルしようとしています。コマンドを実行するまで、すべてがスムーズに進みます。

./rebar get-deps compile generate

これにより、次のエラーと警告が表示されます。

> User@user-:~/simple_server/rebar$ ./rebar get-deps compile generate
> ==> rebar (get-deps)
> ==> rebar (compile) Compiled src/simple_server.erl Compiled src/simple_server_http.erl src/simple_server_http_static.erl:5:
> Warning: behaviour cowboy_http_handler undefined Compiled
> src/simple_server_http_static.erl
> src/simple_server_http_catchall.erl:2: Warning: behaviour
> cowboy_http_handler undefined Compiled
> src/simple_server_http_catchall.erl WARN:  'generate' command does not
> apply to directory /home/harri/simple_server/rebar Command 'generate'
> not understood or not applicable

同じエラーで同様の投稿を見つけました:

コマンド 'generate' が理解できないか適用できない

問題は reltool.config にあると思いますが、続行する方法がわかりません。パスを次のように変更しました: {lib_dirs, ["home/user/simple_server/rebar"]}

パスに問題はありますか?rebar がすべての src ファイルと、アプリケーションをコンパイルしてビルドするために必要な rebar ファイルにアクセスするにはどうすればよいですか?

4

1 に答える 1

1

システム内のすべてをビルドしてリリースを生成する方法を rebar が認識できるように、ディレクトリ構造とその内容が配置されていることを確認する必要があります。ディレクトリ構造は次のようになります。

project
   |
   -- rel
   |
   -- deps
   |
   -- apps
       |
       -- myapp
       |    |
       |    -- src
       |    -- priv
       |
       -- another_app

relディレクトリには、リリースを生成するために必要なすべての情報が保持されます。appsディレクトリは、プロジェクトを構成するアプリケーションが存在する場所です。アプリケーションの依存関係はdepsディレクトリに存在します。ディレクトリの下のmyappやなどの各アプリは、独自のファイルを持つことができます。ここではそのようなアプリケーションが 2 つ以上存在する可能性がありますが、通常は 1 つだけで、他のすべては依存関係になります。another_appappsrebar.config

最上位projectディレクトリには、次のrebar.configような内容のファイルもあります。

{sub_dirs, ["rel", "apps/myapp", "apps/another_app"]}.
{lib_dirs, ["apps"]}.

必要に応じて、rebar を使用してアプリケーション スケルトンからアプリを生成できます。

cd apps
mkdir myapp another_app
( cd myapp && rebar create-app appid=myapp )
( cd another_app && rebar create-app appid=another_app )

アプリケーションに依存関係がある場合は、rebar.configそのディレクトリに を追加し、そこで各依存関係を宣言する必要があります。たとえば、アプリケーションバージョン 1.2 にmyapp依存する場合は、次の内容で作成します。fooapps/myapp/rebar.config

{deps,
 [{foo, "1.*", {git, "git://github.com/user/foo.git", {tag, "foo-1.2"}}}]
}.

を実行するrebar get-depsと、rebar はdepsすべての依存関係を保持する最上位ディレクトリにデータを取り込み、deps必要に応じて作成します。必要に応じて、最上位でrebar.config依存関係を宣言することもできます。

また、リリースに必要なノードを生成する必要があります。

cd ../rel
rebar create-node nodeid=project

reltool.config次に、前の手順で生成されたファイルを変更する必要があります。変更する必要があります

{lib_dirs, []},

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

正しい実行に必要なアプリケーションのみがリリースに含まれるように、行の直後に{incl_cond, derived},追加します。{mod_cond, derived},

次に、atom が表示される場所を、ディレクトリ'project'の下のアプリケーションに置き換える必要があります。appsこの例では、この部分を次のように変更します。

{rel, "project", "1",
 [
  kernel,
  stdlib,
  sasl,
  project
 ]},

これに:

{rel, "project", "1",
 [
  kernel,
  stdlib,
  sasl,
  myapp,
  another_app
 ]},

この部分を変更します。

{app, project, [{mod_cond, app}, {incl_cond, include}]}

これに:

{app, myapp, [{mod_cond, app}, {incl_cond, include}]},
{app, another_app, [{mod_cond, app}, {incl_cond, include}]}

次の行を追加する必要がある場合もあります。

{app, hipe, [{incl_cond, exclude}]},

hipeリリースの生成中またはリリースを実行しようとしたときにエラーが発生することがあるため、アプリケーションを除外します。最初はそれなしで試してみてください。ただしhipe、リリースの生成時に関連するエラーが表示される場合、または生成されたリリースを実行しようとするとこの種のエラーが発生する場合は追加してください。

{"init terminating in do_boot",{'cannot load',elf_format,get_files}}

追加する必要があります。

これらすべてが整ったら、次を実行できます。

rebar get-deps compile generate

リリースを正常に生成できるはずです。rebar generateディレクトリではなく最上位で実行するとrel、次のような無害な警告が表示されることに注意してください。これは無視できます。

WARN:  'generate' command does not apply to directory /path/to/project

最後に、リリースを実行できます。対話型コンソールで実行する方法は次のとおりです。

$ ./rel/project/bin/project console
Exec: /path/to/project/rel/project/erts-6.2/bin/erlexec  -boot /path/to/project/rel/project/releases/1/project -mode embedded -config /path/to/project/rel/project/releases/1/sys.config -args_file /path/to/project/rel/project/releases/1/vm.args -- console
Root: /path/to/project/rel/project
Erlang/OTP 17 [erts-6.2] [source] [64-bit] [smp:8:8] [async-threads:10] [kernel-poll:false]

Eshell V6.2  (abort with ^G)
(project@127.0.0.1)1>

または、実行してバックグラウンドで開始することもできます./rel/project/bin/project start。引数なしで実行./rel/project/bin/projectすると、使用可能なすべてのオプションが表示されます。

于 2014-11-27T16:12:21.647 に答える