【问题标题】:Loading an Erlang project in a Elixir app在 Elixir 应用程序中加载 Erlang 项目
【发布时间】:2016-03-05 15:52:27
【问题描述】:

我正在构建一个使用 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', [], "", [])

为什么会这样?

【问题讨论】:

    标签: elixir elixir-mix


    【解决方案1】:

    您需要将:hackney 作为应用程序的必需模块:

    def application do
      [applications: [:logger, :hackney]]
    end
    

    请参阅 Erlang OTP 文档中的 Applications - OTP Design Principles

    此外,以 iex -S mix 开头的 IEx 将确保为您的混合依赖项正确设置所有加载路径。

    【讨论】:

    • iex -S mix 是的,这是最重要的部分。
    猜你喜欢
    • 2018-11-26
    • 2018-07-18
    • 2016-11-07
    • 2016-01-03
    • 2012-05-17
    • 2016-03-10
    • 2018-05-15
    • 1970-01-01
    • 2020-12-11
    相关资源
    最近更新 更多