1

OTP初心者として、Erlangプロジェクトを構築する方法を理解するのに苦労しています。これまでのところ、rebar によって管理される app ディレクトリの下にいくつかのアプリケーションがあります。

proj_root
   apps
      app1
      app2
      appN
   rebar.config 

たとえば、シェルで application:start(app1) を使用して app1 を起動できます。appN を介してこれを繰り返すことができることは間違いありません。しかし、好ましい方法またはより良い方法はありますか? たとえば、これらすべての開始をバンドルする関数を作成できますか? もしそうなら、どこに置くのですか?

この他にもいくつか質問がありますが、個別に投稿します。

どうもありがとう、

LRP

4

1 に答える 1

7

あなたが提案するように、実際にアプリケーションを手動で起動できます。多くのアプリケーションがあり、それらの間に依存関係がある場合、これはすぐに負担になる可能性があります。

プロセスの自動化は、再帰関数を使用して実装するのが非常に簡単です。1 つ以上の依存関係が実行application:start/1されていないときにアプリケーションを起動しようとすると、失敗して が返され{error, {not_started, App}}ます。この関数は、任意のアプリケーションに含めることも、独自のものにすることもできます。

ただし、この手動 (または自動化) の方法は、OTP の方法ではありません (通常はテストの場合)。OTP の原則に従う場合、すべてのアプリケーションを含むファイルを使用してリリースを作成する必要があります。.relOTP リリースは、一連のアプリケーション (ユーザーおよびそれらが依存するシステム アプリケーション)、エミュレーター、およびすべてのアプリケーションを開始する (そして依存関係を処理する)ブート スクリプトで構成されます。アプリケーションでノードを起動するには、-bootフラグを使用erlして適切なブート スクリプトを指定します。

これは非常に複雑で、rebar は実際にリリースを作成できます。OTP ブート メカニズムを使用して、すべてのアプリケーションでノードを起動するためのシェル スクリプトも生成します。

于 2013-09-04T04:15:58.290 に答える