Rails 6.1多子域名配置root路由报错,Rails 5可正常运行
解决Rails 6.1中多子域名Root路由冲突的问题
问题原因
Rails 6.1对路由名称的唯一性检查更严格,即便路由带有子域名约束,多个root定义仍会默认使用相同的路由名称root,从而触发"Invalid route name, already in use: 'root'"错误。而Rails 5未强制执行该检查,所以之前的代码可以正常运行。
解决方案
给每个带约束的root路由指定唯一的:as别名,避免路由名称冲突:
修改后的routes.rb代码:
AlectricaSite::Application.routes.draw do constraints lambda{ |req| ( req.subdomain == 'shop' || req.subdomain == 'servicios' ) } do root to: 'comercio/servicios#index', as: :commerce_root end constraints lambda{ |req| req.subdomain == 'www' } do root to: 'electrico/album#hola', as: :www_root end end
额外说明
- 现在你可以通过对应的命名路由辅助方法访问这些路由:
commerce_root_path和www_root_path - 如果需要在视图或控制器中动态匹配对应子域名的root路由,可以根据当前请求的子域名判断调用哪个辅助方法,也可以自定义一个全局辅助方法:
# 在app/helpers/application_helper.rb中添加 def dynamic_root_path case request.subdomain when 'shop', 'servicios' commerce_root_url(subdomain: request.subdomain) when 'www' www_root_url(subdomain: 'www') else # 按需处理其他子域名或默认情况 root_url end end
内容的提问来源于stack exchange,提问作者alectrico
相关产品推荐
相关产品推荐

