ruby-on-rails - 安装在子域上的 Engine 中的路由不继承约束

标签 ruby-on-rails routing routes subdomain rails-engines

设置

我们当前的 Rails 应用程序由作为引擎安装的子应用程序组成。通常,这些引擎安装在主 routes.rb 中的子域上。文件如下

mount MySubApp::Engine => '/', as: :sub_app, constraints: {subdomain: 'sub_app'}

问题
MySubApp内的路线的 routes.rb文件 不要使用命名时获取子域 _url helper 。例如以下在 apps/my_sub_app/config/routes.rb
MySubApp::Engine.routes.draw do
  resources :foos
end

给我们 sub_app.foo_url(5)但结果是

http://www.example.com/foos/5



当我们想要

http://sub_app.example.com/foos/5



tl;博士

如何将引擎的安装约束传递给其命名路由?

编辑:解决方法

虽然我仍然更喜欢更好的解决方案,但以下方法可行。您可以将每个子应用中的所有路由都包裹起来 routes.rb可以像这样安装在子域上的文件
MySubApp::Engine.routes.draw do
  constraints Rails.application.routes.named_routes[:sub_app].constraints do
    resources :foos
  end
end

编辑 2:一个不太理想的解决方法

一位评论者(自从被删除?)指出你可以通过 subdomain帮助者的选项,但我们希望避免使用 sub_app.foo_url(5, {subdomain: 'sub_app'})对于每个跨子域链接。即使我们将子域名移动到 ENV 变量中并进行了包装,这也不是 DRY。

最佳答案

@Aaron 不确定您是否已修复此问题,但请查看

config.action_dispatch.tld_length

设置(在引擎的配置上)。我不确定它会如何与引擎 react ,但在我们的例子中,它让我们处理我们的登台服务器的子子域的情况(所以当我们使用 _url 帮助器和登台服务器时,它正确地执行 subdomain.staging.domain.com ,而不是subdomain.domain.com)。

关于ruby-on-rails - 安装在子域上的 Engine 中的路由不继承约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23829884/

相关文章:

apache - 配置 Apache 将 "GET/user/foo"路由到/user/GET.php 并将 "PUT/user/foo"路由到/user/PUT.php

routing - Laravel 4 可选路由参数

javascript - 为什么 react 路线在 Material 用户界面中不起作用?

javascript - 使用到达路由器导航到 404 路由

ruby-on-rails - rails 3.2 使用事件管理员 0.5.5 member_action 获取路由错误

ruby-on-rails - 如何在不更改原始类的情况下替换 belongs_to 关联

ruby-on-rails - 通过 Rails 中的 nested_attributes 传递 current_user ID

ruby-on-rails - 使用适用于 Ruby on Rails 的 AWS CI/CI 流程进行部署

ruby-on-rails - 为什么我的 PostgreSQL 服务器 cpu 受限?

php - Laravel 路由组匹配整个域