2016-05-27 12 views
9

任意に別のもの(AMQP)に依存する16進数パッケージ(Channels)を作成しました。私の実装はEctoのMariaexに対するオプションの依存性に基づいています。チャネル内エリクシルのオプションの依存関係の有無を確認

mix.exs:

defp deps do 
    [{:amqp, "0.1.4", optional: true}] 
end 

チャネルにおける:のものを含む(アプリケーションがDEVとテストで正常に開始され

if Code.ensure_loaded?(AMQP) do 

    defmodule Channels.Adapter.AMQP do 
    ... 
    end 

end 

も通過しているファイルは、AMQPに依存しますAMQP mix test --include amqp_serverに依存します)。

しかし、私はいくつかの問題が発生する別のプロジェクトからパッケージを使用しようとすると:私がしようとすると、

def application do 
    [applications: [:amqp, :channels, ...], 
    ...] 
end 

defp deps do 
    [{:amqp, "0.1.4"}, 
    {:channels, "~> 0.1.1"}, 
    ...] 
end 

:私のプロジェクトでは

私はmix.exsに次のファイルを追加しています私は依存関係としてAMQPを追加しているが、Code.ensure_loaded?(AMQP)が偽とtheref戻っているようだ

=INFO REPORT==== 27-May-2016::10:28:35 === 
application: logger 
exited: stopped 
type: temporary 
** (Mix) Could not start application channels: Channels.start(:normal, []) returned an error: shutdown: failed to start child: Channels.Monitor.Supervisor 
    ** (EXIT) shutdown: failed to start child: :main 
    ** (EXIT) an exception was raised: 
     ** (UndefinedFunctionError) undefined function Channels.Adapter .AMQP.connect/1 (module Channels.Adapter.AMQP is not available) 
      Channels.Adapter.AMQP.connect([]) 
      (channels) lib/channels/monitor.ex:42: Channels.Monitor.init/1 
      (stdlib) gen_server.erl:328: :gen_server.init_it/6 
      (stdlib) proc_lib.erl:240: :proc_lib.init_p_do_apply/3 

:アプリケーションを起動したり、私は次のエラーを取得していますテストを実行鉱石 Channels.Adapter.AMQPは定義されていません。

私はコンパイルプロセスチャンネルでAMQP前にコンパイルされていることに気付きました:

... 
==> channels 
... 
Generated channels app 
==> rabbit_common (compile) 
==> amqp_client (compile) 
==> amqp 
... 
Generated amqp app 
... 

が、これは私の問題の原因である可能性がありますか?もしそうなら、依存関係のコンパイル順を決める方法はありますか?

+1

あなたはどのチャンネルのバージョンを使用していますか?私はhex.pmに公開された '0.0.1'しか見ることはできません。これはオプションの依存関係として' amqp'を含んでいません。オプションの依存関係がどのように表示されているかをご覧ください。 [ecto](https://hex.pm/packages/ecto)。 – Dogbert

+0

あなたはまったく正しいです。私は0.0.1を使用していましたが、私のローカルで変更しました。私はオプションの依存関係としてamqpを付けて0.0.2を公開していました。オプションの依存関係として追加するという事実は、コンパイル順を変更するものですか? – jcabot

+0

はい、それは正しい順序でミックスをコンパイルします。 – Dogbert

答えて

2

ドッグベルトが指摘したように、パッケージの最新バージョンを16進数にプッシュするのを忘れていたので、間違いでした。私はそれをして、適切に働いた。

依存関係をオプションとして指定すると、コンパイル順が変更されます。

+0

この回答に同意する必要があります –