You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Phoenix 1.3伞形项目路由设置失效问题求助

解决Phoenix 1.3伞形项目中路由无法匹配的问题

我来帮你一步步排查这个路由匹配失败的问题,毕竟Phoenix伞形项目的路由配置有时候容易踩这些小坑:

  • 确认端点配置与路由挂载
    首先要确保你的MyAppWeb.Endpoint正确挂载了MyAppWeb.Router。打开apps/my_app/lib/my_app_web/endpoint.ex,检查是否包含这一行关键配置:

    plug Plug.Router, router: MyAppWeb.Router
    

    同时,主项目的config/config.exs里需要正确配置你的端点,确保端口和路由指向都没问题:

    config :my_app, MyAppWeb.Endpoint,
      url: [host: "localhost"],
      http: [port: 4000],
      render_errors: [view: MyAppWeb.ErrorView, accepts: ~w(html json)],
      pubsub: [name: MyApp.PubSub, adapter: Phoenix.PubSub.PG2]
    
  • 检查控制器的存在与命名规范
    要保证RatesController存在于正确路径:apps/my_app/lib/my_app_web/controllers/rates_controller.ex,并且模块名严格匹配MyAppWeb.RatesController,示例代码如下:

    defmodule MyAppWeb.RatesController do
      use MyAppWeb, :controller
    
      def show(conn, %{"coin" => coin}) do
        # 这里写你的业务逻辑,比如返回JSON响应
        json(conn, %{requested_coin: coin})
      end
    end
    

    注意Phoenix 1.3的Web模块命名是MyAppWeb,别写成旧版本的MyApp.Web格式。

  • 验证路由的作用域与存放位置
    你当前的路由配置逻辑没问题,但要确认这段代码是写在apps/my_app/lib/my_app_web/router.ex里,而不是主项目的router文件中。你的路由代码:

    scope "/rates", MyAppWeb do
      get "/:coin", RatesController, :show
    end
    

    结合mix phx.routes的输出,这个规则确实会匹配/rates/:coin路径,位置不对才会导致路由不生效。

  • 确认服务器启动的目标应用
    在伞形项目中,如果你在主目录运行mix phx.server,要确保主项目的mix.exs里已经把:my_app加入到启动列表。检查mix.exs的applications或extra_applications字段是否包含:my_app,如果没有添加上去再重启服务器。另外也可以尝试进入apps/my_app目录单独运行mix phx.server,看是否能正常访问。

  • 清除编译缓存并重启服务
    Phoenix有时候会保留旧的编译缓存,导致新的路由或控制器代码没生效。先停止服务器,然后在主目录运行mix clean,之后再启动mix phx.server,确保最新的代码被加载。

  • 检查请求路径的拼写细节
    最后再确认一下你访问的路径是localhost:4000/rates/usd,有没有大小写错误(比如/Rates/usd)或者多余的斜杠(比如/rates//usd),Phoenix的路由是严格区分大小写和路径格式的。

内容的提问来源于stack exchange,提问作者ntonnelier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:26:20