0

私はアーランが初めてです。mongooseim モジュール内でライブラリを使用できるように、mongoose ソースを使用して RabitMQ Erlang AMQP クライアント ライブラリを構築しようとしています。ここからライブラリのソースをダウンロードしました。.ez ファイルには、ebin と includes の 2 つのディレクトリが含まれています。ebin には .beam ファイルが含まれ、include には erlang .hrl ファイルが含まれます。すべての .hrl ファイルを mongooseim の apps/ejabberd/include ディレクトリにドロップし、すべての .beam ファイルを ebin ディレクトリにドロップすると機能しますか? mongooseim のコンパイルには make と make rel を使用しています。

4

2 に答える 2

2

あなたが提案する方法は機能しますが、よりクリーンなアプローチが可能です。Makefile を微調整して、ビルドしたばかりの MongooseIM リリース ディレクトリにライブラリを単純にコピーすることもできますが、もっと良い方法があります。

  1. amqp_client-3.5.1.ez内にダウンロードして解凍しますmongooseim/apps/
  2. 必要に応じて、git リポジトリにチェックインmongooseim/apps/amqp_client-3.5.1/します。これにより、リポジトリを複製するたびに再度ダウンロードする必要がなくなります。
  3. MongooseIMreltoolの依存関係とコンポーネントをバンドルするのと同じように、アプリケーションをバンドルします。つまり、次のパッチを適用します。

    diff --git a/rel/reltool.config.script b/rel/reltool.config.script
    index 731d58c..395a73f 100644
    --- a/rel/reltool.config.script
    +++ b/rel/reltool.config.script
    @@ -20,7 +20,9 @@ BaseAppsToRun = [compiler,
                      cowboy,
                      fusco,
                      folsom,
    -                 exometer],
    +                 exometer,
    +                 xmerl,
    +                 amqp_client],
    
     AppsToRunIn = BaseAppsToRun ++ proplists:get_value(apps_to_run, Conf, []),
    
    @@ -44,7 +46,9 @@ BaseAppsToInclude = AppsToRun ++
                          alarms,
                          idna,
                          recon,
    -                     setup
    +                     setup,
    +                     xmerl,
    +                     amqp_client
                          ],
    

    xmerlは の依存関係でamqp_clientあるため、リリースにも追加する必要があることに注意してください。

  4. make relamqp_clientMongooseIM にバンドルされたリリースを再ビルドします。
  5. サーバーを実行し (たとえばbin/mongooseimctl live、ディレクトリ内で)、サーバーが利用可能で実行mongooseim/rel/mongooseim中であることを確認します。amqp_client

    (mongooseim@localhost)1> application:which_applications().
    ... snipped ...
     {amqp_client,"RabbitMQ AMQP Client","3.5.1"},
     {xmerl,"XML parser","1.3.7"},
    ... snipped ...
    (mongooseim@localhost)2> amqp_client:start().             
    {error,{already_started,amqp_client}}
    

    (エラーは気にしないでください。もちろん、既に開始されている必要があります。)

于 2015-04-22T21:30:28.560 に答える
0

Jon Brisbin の rebar フレンドリーな amqp ライブラリ ( https://github.com/jbrisbin )を使用すると、はるかに簡単でクリーンであることがわかりました。私がしなければならなかったのは、rebar.config ファイルの依存関係リストに rabbit_common と amqp_client リポジトリを追加することだけでした。

diff --git a/rebar.config b/rebar.config
index c719d98..cafdb0f 100644
--- a/rebar.config
+++ b/rebar.config
@@ -36,6 +36,8 @@
   {pa, ".*", {git, "git://github.com/lavrin/pa.git", "c616d3f9"}},
   {ecoveralls, ".*", {git, "git://github.com/nifoc/ecoveralls.git", "40fa0d2f2057fff29e964f94fccf6ef2f13d34d2"}},
   {mustache, ".*", {git, "git://github.com/mojombo/mustache.erl.git", "d0246fe143058b6404f66cf99fece3ff6e87b7ed"}},
+  {rabbit_common, ".*", {git, "git://github.com/jbrisbin/rabbit_common.git", "rabbitmq-3.5.0"}},
+  {amqp_client, ".*", {git, "git://github.com/jbrisbin/amqp_client.git", {tag, "rabbitmq-3.5.0"}}},
   {recon, "2.2.1", {git, "git://github.com/ferd/recon.git", {tag, "2.2.1"}}}
  ]}.

その後、作成してrelを作成します。以下を使用して、任意の mongooseim モジュールから amqp_client ヘッダーを含めることができます。

-include_lib("amqp_client/include/amqp_client.hrl").
于 2015-06-12T20:45:59.817 に答える