我正在构建一个使用hackney
Erlang项目的Elixir应用程序,我无法使用hackney提供的方法.我mix.exs
看起来像这样:
defmodule Connecter.Mixfile do use Mix.Project def project do [app: :connecter, version: "0.0.1", elixir: "~> 1.2-dev", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps] end # Configuration for the OTP application # # Type "mix help compile.app" for more information def application do [applications: [:logger]] end # Dependencies can be Hex packages: # # {:mydep, "~> 0.3.0"} # # Or git/path repositories: # # {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"} # # Type "mix help deps" for more examples and options defp deps do [{:hackney, "~>1.4.6"}] end end
当我尝试访问库的方法时,我得到UndefinedFunctionError
:
$ iex lib/connecter.ex Erlang/OTP 18 [erts-7.1] [source-2882b0c] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] Interactive Elixir (1.2.0-dev) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> :h heart hipe_unified_loader iex(1)> :h heart hipe_unified_loader iex(1)> :hackney :hackney iex(2)> method = :get :get iex(3)> URL = 'https://friendpaste.com' ** (MatchError) no match of right hand side value: 'https://friendpaste.com' iex(3)> url = 'https://friendpaste.com' 'https://friendpaste.com' iex(4)> headers = [] [] iex(5)> payload = <<>> "" iex(6)> options = [] [] iex(7)> {:ok, status, resp, client} = :hackney.request(method, url, headers, payload, options) ** (UndefinedFunctionError) undefined function :hackney.request/5 (module :hackney is not available) :hackney.request(:get, 'https://friendpaste.com', [], "", [])
为什么会这样?
您需要具备:hackney
应用程序所需的模块:
def application do [applications: [:logger, :hackney]] end
请参阅Erlang OTP文档中的应用程序 - OTP设计原则.
此外,启动IEx iex -S mix
将确保为混合依赖项正确设置所有加载路径.