Elixir如何在伞形应用程序中获取应用程序进行通信

时间:2017-05-21 04:05:02

标签: elixir

我在一个伞形应用程序中有两个应用程序:cap和ed。

如果我使用iex,我可以成功调用第一个函数:

c:\code\a_umbrella_app\apps\cap>iex -S mix
...
iex(1)>Cap.Handler.get_price()
"128.462"

但是当我尝试从我的其他应用程序调用它时会出错。

c:\code\a_umbrella_app\apps\ed>iex -S mix
...
iex(1)> Ed.Usecap.abc(:price)
** (UndefinedFunctionError) function :unicode_util.lowercase/1 is undefined (module :unicode_util is not available)
                :unicode_util.lowercase('api.coinmarketcap.com')
         (idna) c:/code/a_umbrella_app/apps/ed/deps/idna/src/idna.erl:57: :idn
a.lowercase_list/1
         (idna) c:/code/a_umbrella_app/apps/ed/deps/idna/src/idna.erl:10: :idn
a.to_ascii/1
      (hackney) c:/code/a_umbrella_app/apps/ed/deps/hackney/src/hackney_url.er
l:96: :hackney_url.normalize/2
      (hackney) c:/code/a_umbrella_app/apps/ed/deps/hackney/src/hackney.erl:30
6: :hackney.request/5
    (httpoison) lib/httpoison/base.ex:432: HTTPoison.Base.request/9
     (cap) lib/cap/handler.ex:6: Cap.Handler.get_price/0
       (ed) lib/ed/usecap.ex:7: Ed.Usecap.abc/1

这是我的ed app中的代码:

defmodule Ed.Usecap do
  require Cap.Handler

  def abc(:price) do
    Cap.Handler.get_price()
  end

end

和它的代表,我甚至在这里添加了需要的代表:

  defp deps do
    [{:cap, in_umbrella: true},{:httpoison, "~> 0.11.2"},{:poison, "~> 3.0"}]
  end

我做错了什么?我应该能够在伞形应用程序中的另一个应用程序中调用一个应用程序中的功能吗?

1 个答案:

答案 0 :(得分:0)

我不知道是否修复了它但我做了两处修改。我为额外的应用添加了上限。

  def application do
    [extra_applications: [:logger,:cap]...

我忘记了我最初没有把这个应用程序放在伞中,而是我把它放在外面并将其移入,所以它在mix.exs中缺少一些其他代码:

 build_path: "../../_build",
 config_path: "../../config/config.exs",
 deps_path: "../../deps",
 lockfile: "../../mix.lock",