2017-05-21 85 views
0

我在傘應用程序中有兩個應用程序:cap和ed。Elixir如何讓傘應用程序中的應用程序進行通信

我可以成功地調用中的第一個功能,如果我用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 

這裏是從我的編輯應用程序的代碼:

defmodule Ed.Usecap do 
    require Cap.Handler 

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

end 

和它的DEPS,我甚至在這裏補充說帽需求DEPS:

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

我在做什麼錯?我應該能夠從傘應用程序中的另一個應用程序調用一個應用程序中的功能嗎?

+0

你在Erlang 20嗎? 'Ericode_util'被添加到Erlang 20中,它只有一個RC1版本。 – Dogbert

+0

你可以嘗試刪除並重新獲取依賴關係嗎?我想不出任何理由,爲什麼它會在一個傘形應用程序中運行,而不是在任何情況下運行。由於您可以從'ed'訪問'cap'中定義的模塊,因此代碼正確。 – Dogbert

+0

我認爲我的版本19有效。也許我需要更新它 –

回答

0

我不知道這是否修正了它,但我做了兩個修改。我爲額外的應用程序添加了限制。

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

,我忘了我最初沒有使這個應用程序在傘,而不是我外面使它在移動它,所以它缺少在mix.exs一些其他代碼:

build_path: "../../_build", 
config_path: "../../config/config.exs", 
deps_path: "../../deps", 
lockfile: "../../mix.lock", 
相關問題