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

同一服务器不同域名的Rails多租户应用根路径路由配置问题

解决Rails多租户域名根路由匹配问题

关键排查点与修复方案

1. 确认控制器结构正确性

你的路由定义指向了命名空间控制器,必须确保对应控制器已正确创建:

  • 针对pdg域名,创建app/controllers/pdg/home_controller.rb:
module Pdg
  class HomeController < ApplicationController
    def index
      # 业务逻辑代码
    end
  end
end
  • 针对bp域名,创建app/controllers/bp/home_controller.rb:
module Bp
  class HomeController < ApplicationController
    def index
      # 业务逻辑代码
    end
  end
end

2. 修正路由配置

方案一:精确域名约束(开发环境适配)

确保域名约束与访问地址完全匹配,同时用命名空间块简化路由定义:

Rails.application.routes.draw do
  domain_routes = {
    pdg: 'padog.localhost',
    bp: 'bopi.localhost'
  }

  domain_routes.each do |namespace, domain|
    constraints(domain: domain) do
      namespace namespace, path: nil do
        root 'home#index', as: "#{namespace}_root"
        draw "#{namespace}_routes".to_sym
      end
    end
  end

  # 兜底根路由,避免无匹配域名时触发404
  root 'home#index'
end

方案二:正则匹配子域名(生产环境适配)

如果需要匹配任意后缀的子域名,改用正则约束:

Rails.application.routes.draw do
  domain_routes = {
    pdg: /padog\./,
    bp: /bopi\./
  }

  domain_routes.each do |namespace, domain_regex|
    constraints(host: domain_regex) do
      namespace namespace, path: nil do
        root 'home#index', as: "#{namespace}_root"
        draw "#{namespace}_routes".to_sym
      end
    end
  end

  root 'home#index'
end

3. 开发环境Hosts配置

本地开发时,修改系统Hosts文件添加域名映射:

  • Mac/Linux:编辑/etc/hosts
  • Windows:编辑C:\Windows\System32\drivers\etc\hosts

添加以下内容:

127.0.0.1 padog.localhost
127.0.0.1 bopi.localhost

4. 验证路由有效性

运行rails routes命令,确认输出中存在pdg_root和bp_root路由,且它们的约束、控制器指向正确。若仍报错,查看服务器日志,确认请求的host是否匹配约束规则,同时检查控制器代码是否存在语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:44:53