1

驚くべき「ErlangでHTTPAPIを10分で作成する方法」に従って、erlangで非常にシンプルな小さなOTPアプリケーションを作成しました。

https://vimeo.com/59832641

ビデオで示されているように、コマンドライン引数を使用してerlを起動すると完全に機能します。ただし、-args_file引数を指定してerlを起動しようとすると、アプリケーションが起動しません。

args_fileは非常にシンプルです。次のように、1行しかありません。

-pa deps/*/ebin ebin -s fancyapi_app

...そして、erlangを実行しようとしたときに表示されるエラーレポートは次のとおりです。

=INFO REPORT==== 5-Mar-2013::19:32:59 ===
application: fancyapi
exited: {shutdown,{fancyapi_app,start,[normal,[]]}}
type: temporary

何か案は?args_file FileName通常のコマンドライン引数を使用するだけでなく、さらに多くのことが発生しますか?ドキュメントは次の場所にあります:

http://www.erlang.org/doc/man/erl.html

さらに、たとえば-sname nodeテキストファイルに追加すると、erlプロンプトにが表示されるため、コマンドがある程度機能していることがわかります(node@localhost)1>

4

1 に答える 1

4

-emu_argsエミュレーターに送信された正確な引数を表示するフラグを使用してください。簡単なサンプルを次に示します。

$ cat test.args 
-emu_args
-pa deps/*/ebin
-pa ebin
-name test@localhost

ここで、これらすべての引数を手動で渡します。

$ erl -emu_args -pa deps/*/ebin -pa ebin -name test@localhost
Executing: /Users/abhinavsingh/Builds/R15B03/lib/erlang/erts-5.9.3.1/bin/beam.smp /Users/abhinavsingh/Builds/R15B03/lib/erlang/erts-5.9.3.1/bin/beam.smp -- -root /Users/abhinavsingh/Builds/R15B03/lib/erlang -progname erl -- -home /Users/abhinavsingh -- -pa deps/cowboy/ebin deps/jsx/ebin deps/lager/ebin deps/mimetypes/ebin deps/ranch/ebin -pa ebin -name test@localhost

Erlang R15B03 (erts-5.9.3.1) [source] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.3.1  (abort with ^G)
(test@localhost)1> 

次のargsファイル経由:

$ erl -args_file test.args 
Executing: /Users/abhinavsingh/Builds/R15B03/lib/erlang/erts-5.9.3.1/bin/beam.smp /Users/abhinavsingh/Builds/R15B03/lib/erlang/erts-5.9.3.1/bin/beam.smp -- -root /Users/abhinavsingh/Builds/R15B03/lib/erlang -progname erl -- -home /Users/abhinavsingh -- -pa deps/*/ebin -pa ebin -name test@localhost

Erlang R15B03 (erts-5.9.3.1) [source] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.3.1  (abort with ^G)
(test@localhost)1> 

ご覧のとおり、どちらも実際には同じではありません。具体的には、すべて手動で-pa deps/*/ebin展開し-pa deps/cowboy/ebin deps/jsx/ebin ...ますが、argsファイルを介して渡すと同じことがうまくいきません。その結果、特定のモジュールがコードパスに含まれていないため、アプリケーションを起動できません。

于 2013-03-05T21:26:02.253 に答える