【问题标题】:Running mix deps.get throws :erlang.binary_to_atom argument error运行 mix deps.get 会抛出 :erlang.binary_to_atom 参数错误
【发布时间】:2019-04-17 00:58:31
【问题描述】:

我正在构建一个 Nerves 项目,并尝试验证我的自定义固件将按照说明 here 使用主要 Nerves 应用程序构建。我已经使用 Phoenix 建立了一个 UI 项目,并将自定义图像放在项目目录下自己的目录中。主 Nerves 项目是 here,自定义固件是 here 我已将 MIX_TARGET 设置为自定义图像名称 (rpi0_wiringPi),并且在运行时:

mix deps.get

我得到了错误

* (ArgumentError) argument error
:erlang.binary_to_atom(nil, :utf8)
(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
(stdlib) erl_eval.erl:240: :erl_eval.expr/5

现在我在该目录中对 mix 所做的任何事情都会引发相同的错误,包括 mix help。这会告诉我该项目的 mix.exs 文件中有问题,但它在下面,对我来说似乎很好

defmodule Fw.MixProject do
  use Mix.Project

  @target System.get_env("MIX_TARGET") || "host"

  def project do
    [
      app: :fw,
      version: "0.1.0",
      elixir: "~> 1.4",
      target: @target,
      archives: [nerves_bootstrap: "~> 1.0"],
      deps_path: "deps/#{@target}",
      build_path: "_build/#{@target}",
      lockfile: "mix.lock.#{@target}",
      start_permanent: Mix.env() == :prod,
      aliases: [loadconfig: [&bootstrap/1]],
      deps: deps()
    ]
  end

  # Starting nerves_bootstrap adds the required aliases to Mix.Project.config()
  # Aliases are only added if MIX_TARGET is set.
  def bootstrap(args) do
    Application.start(:nerves_bootstrap)
    Mix.Task.run("loadconfig", args)
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
    mod: {Fw.Application, []},
    extra_applications: [:logger, :runtime_tools]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      {:nerves, "~> 1.3", runtime: false},
      {:nerves_network, "~> 0.3"},
      {:ui, path: "../ui"},
      {:shoehorn, "~> 0.2"}
    ] ++ deps(@target)
  end

  # Specify target specific dependencies
  defp deps("host"), do: []

  defp deps(target) do
    [
      {:nerves_runtime, "~> 0.8"}
    ] ++ system(target)
  end

  defp system("rpi"), do: [{:nerves_system_rpi, "~> 1.0", runtime: false}]
  defp system("rpi0"), do: [{:nerves_system_rpi0, "~> 1.0", runtime: false}]
  defp system("rpi0_wiringPi"), do: [{:nerves_system_rpi0_wiringPi, path: "../nerves_system_rpi0_wiringPi", runtime: false}]
  defp system("rpi2"), do: [{:nerves_system_rpi2, "~> 1.0", runtime: false}]
  defp system("rpi3"), do: [{:nerves_system_rpi3, "~> 1.0", runtime: false}]
  defp system("bbb"), do: [{:nerves_system_bbb, "~> 1.0", runtime: false}]
  defp system("ev3"), do: [{:nerves_system_ev3, "~> 1.0", runtime: false}]
  defp system("qemu_arm"), do: [{:nerves_system_qemu_arm, "~> 1.0", runtime: false}]
  defp system("x86_64"), do: [{:nerves_system_x86_64, "~> 1.0", runtime: false}]
  defp system(target), do: Mix.raise("Unknown MIX_TARGET: #{target}")
end

这是目录结构:

clicky
  fw
  ui
  nerves_system_rpi0_wiringPi

由于无论我做什么 mix 都会引发错误,因此我无法从中获得任何帮助。有没有办法让 mix 写下它在做什么的日志或其他可以帮助我解决问题的方法?

【问题讨论】:

  • 您是否尝试过运行干净的构建?
  • 我会开始在任何地方硬编码你的target旁注: [{:nerves_runtime, "~> 0.8"}] ++ system(target) 写成[{:nerves_runtime, "~> 0.8"} | system(target)] 更好(anf 可能快得多)。
  • 在需要检查价值的地方使用IO.inspect()。在管道中使用是安全的,因为它返回任何参数!
  • 由于依赖项不可用而无法构建,因此我无法清理构建。
  • @JustinWood 我的立场已得到纠正,开始运行混合构建但未成功完成。感谢您为我指明了这个方向,我现在可以查看导致构建失败的原因

标签: elixir nerves-project


【解决方案1】:

我也遇到了这个错误。事实证明 mix.exs 不是问题。我忽略了在 config.exs 中设置 Nerves 网络环境变量(NERVES_NETWORK_SSID、NERVES_NETWORK_PSK 和 NERVES_NETWORK_MGMT)。一旦我修复了“mix deps.get”就可以了。

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 2018-08-26
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多