【问题标题】:Can't run any mix command - ** (FunctionClauseError) no function clause matching in IO.chardata_to_string/1无法运行任何混合命令 - ** (FunctionClauseError) IO.chardata_to_string/1 中没有函数子句匹配
【发布时间】:2019-03-07 09:25:16
【问题描述】:

我的本​​地 Mac 上有完全相同的代码和版本,可以正常运行混合命令。我提取了一个全新的项目副本以确保。没有 _build、deps 或 tmp 目录。此错误未提供有关问题的任何信息。可能会发生什么,或者我可以研究什么来解决这个问题?

问题出在 Ubuntu 18.04 LTS 上。我已经尝试了多个 erlang/elixir 版本,并且都在下面产生相同的输出。

root@instance-1:/srv/zipbooks/phoenix-api# elixir -v
Erlang/OTP 21 [erts-10.2.5] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [hipe]

Elixir 1.8.1 (compiled with Erlang/OTP 21)
root@instance-1:/srv/zipbooks/phoenix-api# mix compile
** (FunctionClauseError) no function clause matching in IO.chardata_to_string/1    

    The following arguments were given to IO.chardata_to_string/1:

        # 1
        nil

    Attempted function clauses (showing 2 out of 2):

        def chardata_to_string(string) when is_binary(string)
        def chardata_to_string(list) when is_list(list)

    (elixir) lib/io.ex:461: IO.chardata_to_string/1
    (elixir) lib/path.ex:512: Path.join/2
    (stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
    (stdlib) erl_eval.erl:888: :erl_eval.expr_list/6
    (stdlib) erl_eval.erl:240: :erl_eval.expr/5
    (stdlib) erl_eval.erl:232: :erl_eval.expr/5
    (stdlib) erl_eval.erl:233: :erl_eval.expr/5
    (stdlib) erl_eval.erl:888: :erl_eval.expr_list/6

【问题讨论】:

  • 你是从 git 克隆的吗?如果是这样,也许检查你的 gitignore 中的内容,并确保你复制了任何可能丢失的文件
  • 我确实检查过了,gitignore 中没有任何可以依赖的东西
  • 服务器上的devprod 环境中是否都会发生错误?我只是在这里猜测,但我在mix/tasks/deps.compile.ex 中看到很多Path.join 调用。也许您仅在 dev 中包含依赖项,或者在您的 mix.exs 中包含其他配置错误的内容。
  • 我尝试了所有三种环境,dev、prod 和 test
  • 好的。 mix deps.compile 是否给您同样的错误?

标签: elixir phoenix-framework


【解决方案1】:

问题似乎是nil 值正在传递给IO.chardata_to_string。如果你运行iex 并输入:

IO.chardata_to_string(nil)

您将收到相同的错误。现在,如果您输入如下内容:

IO.chardata_to_string("my string")

你会得到你可能期望的结果。

没有看到您的代码,我无法说明为什么您会得到传递给 IO.chardata_to_string 的 nil 值,但这似乎是问题所在。

希望对你有帮助。

干杯!

【讨论】:

  • 从堆栈跟踪中可以看出,OP 实际上并没有直接调用该函数。
  • 问题最终是配置文件中的Path.join 调用
猜你喜欢
  • 1970-01-01
  • 2021-01-22
  • 2019-08-06
  • 2019-06-15
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
相关资源
最近更新 更多