长生不老药中未定义功能(混合测试)

function is undefined in elixir (mix test)

我正在尝试在 Xubuntu 16.04 上安装 IElixir Jupyter notebook 内核。我之前在另一台使用 Xubuntu 16.04 的机器上成功完成了它。

我有最新的 erlang otp 19.3 和 elixir 1.4.4(使用 kiex 安装)。

执行 mix test 后,我得到一个关于未定义 :erlzmq_nif.context/1 函数的错误:

** (Mix) Could not start application ielixir: exited in: IElixir.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) function :erlzmq_nif.context/1 is undefined (module :erlzmq_nif is not available)
            :erlzmq_nif.context(1)
            (ielixir) lib/ielixir.ex:13: IElixir.start/2
            (kernel) application_master.erl:273: :application_master.start_it_old/4

问题是所有依赖项都已成功安装,我可以在 iex:

中使用 :erlzmq_nif.context/1
iex(1)> :erlzmq_nif.context 1
{:ok, ""}
iex(2)> 

我已经将 erlzmq 的构建复制到 /usr/lib/erlang/lib 以便我也可以在 erlang 中使用它:

1> erlzmq_nif:context(3).
{ok,<<>>}
2> 

为什么在使用 mix 时这个库对 elixir 不可见?

我还没有解决问题,但我已经设法让 IElixir 工作了。

我所做的是将 mix.exs 中的 :erlzmq 依赖项替换为 github: "zeromq/erlzmq"(注意回购名称中没有 2),这可能不会优于 [=14] =] 因为它不是基于 NIF,但至少它可以正常工作。