【问题标题】:Phoenix started throwing (UndefinedFunctionError) function :crypto.rand_bytes/1 is undefined or privatePhoenix 开始抛出 (UndefinedFunctionError) 函数:crypto.rand_bytes/1 is undefined or private
【发布时间】:2017-12-09 05:20:05
【问题描述】:

在更新到我的系统 - MAC 之后,我的 phoenix 应用程序编译得很好,但是每当我到达任何路线时都会抛出这个错误。

服务器:localhost:4000 (http) 请求:GET / **(退出)引发异常: ** (UndefinedFunctionError) 函数 :crypto.rand_bytes/1 未定义或私有。您是指以下之一吗:

  * rand_seed/0
  * rand_seed/1

    (crypto) :crypto.rand_bytes(20)
    (plug) lib/plug/request_id.ex:59: Plug.RequestId.generate_request_id/0
    (plug) lib/plug/request_id.ex:48: Plug.RequestId.get_request_id/2
    (plug) lib/plug/request_id.ex:42: Plug.RequestId.call/2
    (olars) lib/olars/endpoint.ex:1: Olars.Endpoint.phoenix_pipeline/1
    (olars) lib/plug/debugger.ex:93: Olars.Endpoint."call (overridable 3)"/2
    (olars) lib/olars/endpoint.ex:1: Olars.Endpoint.call/2
    (plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
    (cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4

我的 mix.exs

{:phoenix, "~> 1.2.0"},
      {:phoenix_pubsub, "~> 1.0"},
      {:phoenix_ecto, "~> 3.0"},
      {:phoenix_haml, github: "chrismccord/phoenix_haml"},
      {:mariaex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.6"},
      {:phoenix_live_reload, "~> 1.0", only: :dev},
      {:gettext, "~> 0.11"},
      {:cowboy, "~> 1.0"},
      {:arc,  "~> 0.5.2"},
      {:arc_ecto, "~> 0.3.2"},
      {:ex_aws, "~> 0.4.10"},
      {:httpoison, "~> 0.9"},
      {:poison, "~> 2.0"},
      {:ecto, "~> 2.0.2", override: true},
      {:plug_auth, github: "smpallen99/plug_auth"},
      {:comeonin, "~> 2.1.0"},
      {:phoenix_calendar, "~> 0.1.2"},
      {:httpotion, "~> 3.0.0", override: true},
      {:timex, "~> 3.0"},
      {:quantum,github: "c-rack/quantum-elixir"},
      {:calendar, "~> 0.16.1"},
      {:uri_query, "~> 0.1.1"},
      {:scrivener, "~> 2.0"},
      {:scrivener_list, "~> 1.0"},
      {:number, "~> 0.5.0"},
      {:xlsxir, "~> 1.4.1"},
      {:new_relic, "~> 0.1.1"},
      {:retry, "~> 0.7"},
      {:credo, "~> 0.8", only: [:dev, :test], runtime: false}

Elixr 版本:Elixir 1.4.5 Erlang 版本:20

如果你们需要任何其他信息,请告诉我。

【问题讨论】:

    标签: elixir phoenix-framework plug


    【解决方案1】:

    @mudasobwa 在 cmets 中提到

    在您的 mix.ex 文件中添加明确的 {:plug, "~> 1.3"}

    修复了这个问题。

    感谢所有试图提供帮助的人。

    【讨论】:

      【解决方案2】:

      :crypto.rand_bytes/1removed in OTP 20。你应该改用:crypto.strong_rand_bytes/1

      在这种情况下,您似乎需要更新插件以拥有this commit。您可以运行 mix deps.update plug 来执行此操作。

      【讨论】:

      • 已经完成了,但没有任何成功...我的插件版本plug 1.1.9,看起来它已锁定到这个版本,但正如我的 mix.ex 上显示的那样,我没有将它锁定在任何版本.
      • @Renews 在您的 mix.ex 文件中添加明确的 {:plug, "~> 1.3"}
      • @mudasobwa 谢谢,这使它起作用,将使用您的评论作为对此问题的回应。
      猜你喜欢
      • 2011-11-18
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 2016-10-02
      • 1970-01-01
      • 2019-04-12
      相关资源
      最近更新 更多