【问题标题】:How to match redirect with subdomain in rails如何将重定向与rails中的子域匹配
【发布时间】:2018-04-04 04:26:40
【问题描述】:

我的项目中有以下工作路线:

  match 'investidor/*path' => redirect('investidores/entrar'), via: :get

我还需要将其更改为重定向到不同的子域,就像在开发中这样:

  match 'investidor/*path' => redirect('http://investidor.lvh.me:3000/investidores/entrar'), via: :get

此代码有效,但我需要对其进行调整以适应多种环境和多种资源,因此我不想使用if Rails.env.ENVIRONMENT? 来做到这一点,除非没有其他办法。 所以我尝试了这样的事情:

  match 'investidor/*path' => redirect('investidores/entrar'), via: :get, subdomain: 'investidor'
  # AND
  match 'investidor/*path' => redirect('investidores/entrar'), via: :get, constraints: { subdomain: 'investidor' }

但是这两个重定向都忽略了 subdomain 参数。有什么办法吗?

谢谢!

【问题讨论】:

  • 我知道您不想使用条件,但它并不像您想象的那么难看... subdomain = Rails.env.development? ? '/路径' : '/'
  • 我知道,但我只是想确保没有其他方法可以做到这一点,因为我也有一个暂存环境,所以我将无法使用内联 if

标签: ruby-on-rails ruby redirect routes


【解决方案1】:

我会使用 config/environments/*.rb 设置子域值并在路由中引用它。

例如:

    # config/environments/development.rb:
Rails.application.configure do
  SUBDOMAIN="dev_domain"
...


# config/environments/production.rb:
Rails.application.configure do
  SUBDOMAIN="prod_domain"
...

# config/routes.rb:
'investidor/*path' => redirect("http://#{SUBDOMAIN}/investidores/entrar"), via: :get

【讨论】:

  • 如果没有其他方法,我可能最终会使用它,但我仍然需要为每个子域(或在我的情况下为资源)创建一个常量
  • 如果你只有很少的资源可以映射,我会这样做。如果您有十几个并且它们不经常更改,则 yml 文件可能更合适(想想domains.yml 的格式类似于database.yml)。如果您有很多资源,或者它们经常更改,我会将其移动到带有管理界面的表格中。
猜你喜欢
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 2022-01-04
  • 2017-01-23
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
相关资源
最近更新 更多