任意に別のもの(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
...
が、これは私の問題の原因である可能性がありますか?もしそうなら、依存関係のコンパイル順を決める方法はありますか?
あなたはどのチャンネルのバージョンを使用していますか?私はhex.pmに公開された '0.0.1'しか見ることはできません。これはオプションの依存関係として' amqp'を含んでいません。オプションの依存関係がどのように表示されているかをご覧ください。 [ecto](https://hex.pm/packages/ecto)。 – Dogbert
あなたはまったく正しいです。私は0.0.1を使用していましたが、私のローカルで変更しました。私はオプションの依存関係としてamqpを付けて0.0.2を公開していました。オプションの依存関係として追加するという事実は、コンパイル順を変更するものですか? – jcabot
はい、それは正しい順序でミックスをコンパイルします。 – Dogbert