【问题标题】:Erlang package failing to loadErlang 包无法加载
【发布时间】:2017-09-24 03:00:18
【问题描述】:

我正在尝试在我的 Phoenix 项目中使用 Erlang 包(这个:https://github.com/komone/qrcode),所以我只是想从我的混合文件中获取它:

  defp deps do
    [{:phoenix, "~> 1.3.0-rc"},
     {:phoenix_pubsub, "~> 1.0"},
     {:phoenix_ecto, "~> 3.2"},
     {:postgrex, ">= 0.0.0"},
     {:gettext, "~> 0.11"},
     {:cowboy, "~> 1.0"},
     {:comeonin, "~> 3.0"},
     {:uuid, "~> 1.1"},
     {:timex, "~> 3.1"},
     {:timex_ecto, "~> 3.1"},
     {:porcelain, "~> 2.0"},
     {:qrcode, git: "https://github.com/komone/qrcode"}, # <--
     {:credo, "~> 0.7", only: [:dev, :test]}]
  end

我必须在获取的目录中手动erl -make 才能使其编译,但在 phoenix 启动时出现以下错误:

** (Mix) Could not start application qrcode: exited in: :qrcode.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) function :qrcode.start/2 is undefined or private
            (qrcode) :qrcode.start(:normal, [])
            (kernel) application_master.erl:273: :application_master.start_it_old/4

还有其他步骤可以让它发挥作用吗?

【问题讨论】:

    标签: elixir phoenix-framework elixir-mix


    【解决方案1】:

    刚刚找到了方便的混音选项:

    {:qrcode, git: "https://github.com/komone/qrcode", app: false}
    

    为了防止 Mix 尝试加载打包应用文件。

    https://hexdocs.pm/mix/Mix.Tasks.Deps.html

    注意:您可以使用:compile 选项来摆脱手动编译 Emakefile 包,在这种情况下:

    {:qrcode, git: "https://github.com/komone/qrcode", app: false, compile: "erl -make"}
    

    【讨论】:

    • 我想这也照顾了erlc_paths。我刚刚意识到我下面的示例是在我的项目中包含 Erlang 代码,而不是作为依赖项。
    • 请注意,这是 Elixir 1.4 中的新功能。
    【解决方案2】:

    编辑

    我下面的示例是在 Elixir 项目中包含 Erlang 源代码,而不是像所问的问题那样作为依赖项。我把帖子留在这里,以防它可以帮助其他人如何尝试编译他们的 Erlang 代码。

    我已经有一段时间没有这样做了,但是回顾以前的项目,我在我的mix.exs 文件中看到了以下内容:

    def project do
      [ app: :mdse,
        # ...
        erlc_paths: ["./lib/mdse/rpc/src", "src"]
      ]
    end
    

    这应该让它用 mix 自动编译。

    查看您提供的qrcode 的来源后,它不是应用程序。所以我不相信您可以将其添加到您的applications: 列表中。相反,您应该可以将它用作任何 Erlang 库,例如 :qrcode.encode(...)

    【讨论】:

    • : qrcode 没有在我的应用程序中的 mix 文件中列出,但 Mix 似乎仍然尝试将其作为应用程序默认加载。
    • @Kernael 感谢分享。我以前从未尝试过使用依赖项中的非应用程序。你可能只是为我节省了一些在未来挠头的时间。
    猜你喜欢
    • 2016-10-09
    • 2022-06-15
    • 2014-06-04
    • 2015-07-20
    • 2018-03-11
    • 2019-10-16
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多