【问题标题】:How to add erlang packages into an elixir application如何将 erlang 包添加到 elixir 应用程序中
【发布时间】:2018-07-18 06:38:53
【问题描述】:

我正在尝试使用 edeliver 构建我的 elixir 应用程序的版本,但我收到以下错误。

==> Failed to build release:

    Undefined applications: [xmerl]

我正在尝试将xmerl 添加到mix.exs 文件中的deps 列表中,但我不确定如何执行此操作。

任何帮助将不胜感激。提前致谢

这是当前在我的项目中的部门列表...

defp deps do
  [{:phoenix, "~> 1.2.1"},
   {:appsignal, "~> 1.0"},
   {:phoenix_pubsub, "~> 1.0"},
   {:phoenix_ecto, "~> 3.0"},
   {:postgrex, ">= 0.0.0"},
   {:phoenix_html, "~> 2.6"},
   {:phoenix_live_reload, "~> 1.0", only: :dev},
   {:phoenix_html_sanitizer, "~> 1.0.0"},
   {:gettext, "~> 0.11"},
   {:cowboy, "~> 1.0"},
   {:earmark, "~> 1.1"},
   {:comeonin, "~> 3.0"},
   {:credo, "~> 0.7.2", only: [:dev, :test]},
   {:timex, "~> 3.0"},
   {:segment, github: "tonydaly/analytics-elixir"},
   {:bamboo, "~> 0.7"},
   {:bamboo_smtp, "~> 1.2.1"},
   {:mock, "~> 0.2.0", only: :test},
   {:faker, "~> 0.7"},
   {:wallaby, "~> 0.16.1"},
   {:ecto_factory, "~> 0.0.6"},
   {:oxleas_adhd, in_umbrella: true},
   {:plug, "~>1.3.5", override: true}
 ]
end

【问题讨论】:

  • 能否请您出示 mix.exs 文件,特别是 deps 部分。
  • @JustinWood mix 文件没有 sections :) deps 是一个普通的旧函数,默认生成的脚手架中的 project 回调调用。
  • @JustinWood 我已更新问题以显示部门
  • @mudasobwa 我知道混音没有真正的部分。但是口语化地求一个节应该可以理解。

标签: elixir phoenix-framework ecto


【解决方案1】:
def deps do
  [
    {:xmerl, "~> 1.3.16"}
  ]
end

你必须获取deps,

$ mix deps.get

【讨论】:

  • 1. deps 应该是私有函数,2. deps 不是回调,不会在 mix.exs 文件中执行任何操作,除非在从 project 回调返回 deps 时调用 .
  • 是的,应该是 defp 而不是 def
【解决方案2】:

为了以后的访问者,我会把正确的答案放在这里。

mix.exs 文件应声明两个回调:project 和(可选)application

当项目打算作为应用程序运行并且超出此问题的范围时,使用后者。前者必须返回一个关键字列表,描述当前的Mix.Project。此关键字列表可能显然包含 deps 关键字以返回此项目的依赖项列表。这些依赖项将由mix 工具半自动管理(获取、重建等)。

默认情况下,mix new 任务为project 回调生成一个脚手架,返回此列表如下:

  def project do
    [
      app: :blah,
      version: "0.1.0",
      elixir: "~> 1.7-dev",
      start_permanent: Mix.env() == :prod,
      deps: deps() # ⇐ HERE
    ]
  end

如果有人坚持使用建议的脚手架,他们应该实现私有函数deps(参见上面的最后一行。)

如果你有一个依赖,就在原地做:

  def project do
    [
      app: :blah,
      version: "0.1.0",
      elixir: "~> 1.7-dev",
      start_permanent: Mix.env() == :prod,
      deps: [{:exmerl, "~> 0.1"}] # ⇐ HERE
    ]
  end

exmerlxmerlexml 或任何其他的 Elixir 包装器。

【讨论】:

  • 感谢您的回复。我已尝试按照您在回答中的建议添加{:xmerl, "~> 1.3"},但出现以下错误...“Failed to fetch record for 'hexpm/xmerl' from registry (using cache) This could be because the package does not exist, it was spelled incorrectly or you don't have permissions to it”。看起来这个包不存在。但是我知道它是 erlang 的一部分。有什么想法吗?
  • 确实应该是hex.pm/packages/exmerl,我错过了纯erlang,抱歉。更新了答案。
  • 感谢您的更新。也尝试过添加这个包,但我得到了同样的错误。似乎这是我的问题edeliver,它正在为我的应用程序运行构建,因为我在本地运行它时没有收到错误。
猜你喜欢
  • 2011-09-13
  • 2016-03-05
  • 2018-02-11
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 2013-04-12
  • 2019-02-21
相关资源
最近更新 更多