【问题标题】:Phoenix server does not start - module Plug.Cowboy is not availablePhoenix 服务器无法启动 - 模块 Plug.Cowboy 不可用
【发布时间】:2023-03-05 10:42:02
【问题描述】:

我是凤凰和灵药的新手。我正在创建一个 phoenix Web 服务器作为后端 API 服务器。我已按照凤凰框架网站上给出的步骤进行操作。

软件版本:

Erlang/OTP 21 [erts-10.2.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Elixir 1.8.1(使用 Erlang/OTP 20 编译)

凤凰v1.4.0-dev

和部门

  {:phoenix, github: "phoenixframework/phoenix", override: true},
  {:phoenix_pubsub, "~> 1.0"},
  {:phoenix_ecto, "~> 3.2"},
  {:postgrex, ">= 0.0.0"},
  {:phoenix_html, "~> 2.11"},
  {:phoenix_live_reload, "~> 1.0", only: :dev},
  {:gettext, "~> 0.11"},
  {:jason, "~> 1.0"},
  {:cowboy, "~> 1.0"}

当我尝试运行 mix phx.server 时,出现以下错误:

[info] Application hello exited: Hello.Application.start(:normal, []) returned an error: shutdown: failed to start child: HelloWeb.Endpoint
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) function Plug.Cowboy.child_spec/1 is undefined (module Plug.Cowboy is not available)
            Plug.Cowboy.child_spec([scheme: :http, plug: {HelloWeb.Endpoint, []}, options: [dispatch: [_: [{"/phoenix/live_reload/socket/websocket", Phoenix.Endpoint.CowboyWebSocket, {Phoenix.Transports.WebSocket, {HelloWeb.Endpoint, Phoenix.LiveReloader.Socket, [path: "/websocket", serializer: [{Phoenix.Socket.V1.JSONSerializer, "~> 1.0.0"}, {Phoenix.Socket.V2.JSONSerializer, "~> 2.0.0"}], timeout: 60000, transport_log: false, compress: false]}}}, {"/socket/websocket", Phoenix.Endpoint.CowboyWebSocket, {Phoenix.Transports.WebSocket, {HelloWeb.Endpoint, HelloWeb.UserSocket, [path: "/websocket", serializer: [{Phoenix.Socket.V1.JSONSerializer, "~> 1.0.0"}, {Phoenix.Socket.V2.JSONSerializer, "~> 2.0.0"}], timeout: 60000, transport_log: false, compress: false]}}}, {:_, Plug.Adapters.Cowboy.Handler, {HelloWeb.Endpoint, []}}]], port: 4000, otp_app: :hello]])
            (phoenix) lib/phoenix/endpoint/cowboy_adapter.ex:96: Phoenix.Endpoint.CowboyAdapter.child_spec/3
            (phoenix) lib/phoenix/endpoint/supervisor.ex:108: anonymous fn/6 in Phoenix.Endpoint.Supervisor.server_children/4
            (elixir) lib/enum.ex:1940: Enum."-reduce/3-lists^foldl/2-0-"/3
            (phoenix) lib/phoenix/endpoint/supervisor.ex:99: Phoenix.Endpoint.Supervisor.server_children/4
            (phoenix) lib/phoenix/endpoint/supervisor.ex:59: Phoenix.Endpoint.Supervisor.init/1
            (stdlib) supervisor.erl:295: :supervisor.init/1
            (stdlib) gen_server.erl:374: :gen_server.init_it/2
            (stdlib) gen_server.erl:342: :gen_server.init_it/6
            (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3

我尝试将牛仔的版本更改为 2.6.3(根据 brew 似乎是最新的),但仍然遇到相同的错误。

请帮我解决这个问题。

-谢谢, 夏拉

【问题讨论】:

  • 你跑mix deps.get了吗?
  • 是的。我跑了 mix deps.get。但仍然出现同样的错误。
  • 在我用 1.4.0 版重新安装 phoenix 后工作。这给了新的部门作为 {:phoenix, "~> 1.4.0"}, {:phoenix_pubsub, "~> 1.1"}, {:phoenix_ecto, "~> 4.0"}, {:ecto_sql, "~> 3.0"} , {:postgrex, ">= 0.0.0"}, {:phoenix_html, "~> 2.11"}, {:phoenix_live_reload, "~> 1.2", 仅::dev}, {:gettext, "~> 0.11" }, {:jason, "~> 1.0"}, {:plug_cowboy, "~> 2.0"} 牛仔被替换为 plug_cowboy。
  • @Shaila123456789,继续发表您的评论作为答案。几天后,论坛软件将允许您为您的答案打勾并关闭主题。

标签: phoenix-framework


【解决方案1】:

我刚刚在更新旧项目时遇到了同样的问题。显然 Chris Mccord 将凤凰更新指南放在他的 gist 帐户中。您可以从这里找到所有内容:https://gist.github.com/chrismccord

因此,如果您从 1.3 更新到 1.4,则必须将牛仔依赖项替换为 plug_cowboy。

详细说明可在此处获得:https://gist.github.com/chrismccord/bb1f8b136f5a9e4abc0bfc07b832257e

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2019-03-28
    • 2015-10-02
    • 2018-05-30
    相关资源
    最近更新 更多