2016-06-24 5 views
3

私は鉄筋アプリの構造を持ち、depsフォルダにいくつかの依存関係があると仮定すると、いくつかはライブラリアプリケーションであり、いくつかは起動する必要のあるアプリケーションです。私は通常次のようにします:Erlangアプリケーションの依存関係のコードパスをロードする正しい方法は何ですか?

start(_Type, _Args) -> 
    code:add_path("../deps/depapp/ebin"), 
    {ok, _} = application:ensure_all_started(depapp), 

これは開発環境で行う正しい方法ですか?プロダクションではいかがですか?

答えて

1

あなたの使ったことは必ずしも間違った方法ではありませんが、いくつかの問題が発生する可能性があります。たとえば、アプリケーションの前に起動しなければならない依存アプリケーションを起動する選択肢がありません。

したがって、loadingまたはstartingに依存するOTPアプリケーションまたはライブラリの代替手段があります。それを処理するためのパッケージマネージャ使用)

erl -pa ebin deps/*/ebing -s your_dep_app start -s your_app start 

2:erlコマンドラインフラグを使用して

1)パッケージマネージャとして例鉄筋として

はあなたのためにそれを扱うことができます。必要なのは、アプリケーションの依存関係をrebar.configに指定し、Rebar2の場合はrebar get-deps、Rebar3の場合はrebar3 compileを発行することです。以下はRebar3用のサンプル設定ファイルの抜粋です:

{deps,[ 
    %% Packages 
    rebar, 
    {rebar,"1.0.0"}, 
    {rebar, {pkg, rebar_fork}}, % rebar app under a different pkg name 
    {rebar, "1.0.0", {pkg, rebar_fork}}, 
    %% Source Dependencies 
    {rebar, {git, "git://github.com/erlang/rebar3.git"}}, 
    {rebar, {git, "http://github.com/erlang/rebar3.git"}}]}. 

鉄筋依存性マネージャの詳細についてはthisリンクを見てみましょう。

また、Rebarを使用してそれらを開始またはロードするには、リリースを行い、Rebarを開始またはロードすることができます。

{relx, [ 
    {release, 
    {your_app, "0.1.0"}, 
     [your_dep_app_1, 
     {your_dep_app_2, load}]}]}. 

この設定がロードされ、your_dep_app_1を開始しますが、ちょうどyour_dep_app_2をロードします。以下は、リリースを行うためのサンプルの鉄筋の設定ファイルの抜粋です。 Rebar release managerの詳細については、thisリンクを参照してください。

関連する問題