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

基于域名实现多语言时Devise路由报错问题排查

基于域名的多语言路由配置与Devise兼容问题

我想通过域名实现多语言功能,例如domain.fi.local对应芬兰语、domain.es.local对应西班牙语,且每个域名下均可切换至英语。为每个域名添加路由约束后,Devise功能出现失效问题:

  • 将devise_for放在约束外可避免重复调用报错,但访问Devise路由(如登出)时仍报错;
  • 尝试在约束内添加devise_for :users, skip: :all,问题依旧。

原始routes.rb代码

Rails.application.routes.draw do
  devise_for :users

  constraints(host: "domain.fi.local") do
    scope "(:locale)", locale: /fi|en/ do
      resources :users do
        resource :profile, only: [:show, :edit, :update]
      end
      resources :trips
    end
  end

  constraints(host: "domain.es.local") do
    scope "(:locale)", locale: /es|en/ do
      resources :users do
        resource :profile, only: [:show, :edit, :update]
      end
      resources :trips
    end
  end

  # 通用 fallback 路由(默认英语)
  scope "(:locale)", locale: /en|fi|es/ do
    resources :users do
      resource :profile, only: [:show, :edit, :update]
    end
    resources :trips
  end

  # 健康检查
  get "up" => "rails/health#show", as: :rails_health_check

  # 唯一根路径避免冲突
  root "trips#index"
end

修改后的routes.rb代码

Rails.application.routes.draw do
  # 全局定义Devise路由(约束外)
  devise_for :users

  constraints(host: "domain.fi.local") do
    scope "(:locale)", locale: /fi|en/ do
      devise_for :users, skip: :all  # 避免约束内生成重复路由
      resources :users do
        resource :profile, only: [:show, :edit, :update]
      end
      resources :trips
    end
  end

  constraints(host: "domain.es.local") do
    scope "(:locale)", locale: /es|en/ do
      devise_for :users, skip: :all  # 避免约束内生成重复路由
      resources :users do
        resource :profile, only: [:show, :edit, :update]
      end
      resources :trips
    end
  end

  # 通用 fallback 路由(默认英语)
  scope "(:locale)", locale: /en|fi|es/ do
    devise_for :users, skip: :all  # 避免生成重复路由
    resources :users do
      resource :profile, only: [:show, :edit, :update]
    end
    resources :trips
  end

  # 健康检查
  get "up" => "rails/health#show", as: :rails_health_check

  # 唯一根路径避免冲突
  root "trips#index"
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:27:10