【问题标题】:Using www at 2nd level subdomain ignores the 1st level subdomain in apartment在二级子域使用 www 会忽略公寓中的一级子域
【发布时间】:2017-11-17 23:05:48
【问题描述】:

我有如下子域:lks.harabiz.com & lkm.harabiz.com,每个都有自己的数据库表。

当有人尝试 URL:www.lkm.harabiz.com 时,所使用的数据库表与 lkm 的不同,这些数据库表实际上属于 www,而不是 lkm

这个问题有两种解决方案:

  1. www.lkm.harabiz.com 指向lkm.harabiz.com
  2. 使www.lkm.harabiz.com 使用实际属于lkm 的数据库表,而不是www

我使用的是 Rails 5.0.0.1,应用是通过 Heroku 部署的。

我查看了 DNS 的内容,以及应用程序级别的内容,但我无法达到预期的结果。

【问题讨论】:

    标签: ruby-on-rails heroku dns subdomain apartment-gem


    【解决方案1】:

    您可以使用Custom Elevator

    # application.rb
    module MyApplication
      class Application < Rails::Application
        config.middleware.use Apartment::Elevators::Generic, Proc.new { |request| request.host.split('.')[-3] }
      end
    end
    

    【讨论】:

    • 它有效。但是有没有办法可以完全删除二级子域?
    • 此外,如果子域为www,则此自定义电梯不起作用。
    • 如果要将www.lkm.harabiz.com重定向到lkm.harabiz.com,可以通过DNS或者nginx/apache配置实现。
    【解决方案2】:

    只需将Top Level Domain 增加 1:

    # config/environments/production.rb
    Rails.application.configure do
      config.action_dispatch.tld_length = 2
    end
    

    有关此选项的更多信息在此处:http://guides.rubyonrails.org/configuring.html

    还有一点关于它是如何工作的描述:http://api.rubyonrails.org/classes/ActionDispatch/Http/URL.html

    【讨论】:

      【解决方案3】:

      您可以使用下面的代码从您的 config/routes.rb 文件中捕获

      Rails.application.routes.draw do
        get '', to: 'lkm_controllers#index', constraints: lambda { |r|
         r.subdomain.present? && r.subdomain == "www.lkm"
        }
        get '', to: 'lks_controllers#index', constraints: lambda { |r|
         r.subdomain.present? && r.subdomain == "www.lks"
        }
        # other resources
      end
      

      确保你在上面输入的这两个命令,所以它首先检查它是使用 www.lkm 还是只是 lkm

      【讨论】:

        【解决方案4】:

        使用这些不同表的方式是特定于应用程序的,因此您不应添加任何 DNS 交互代码,因为它会使您的代码变得脆弱且不易移植,也不应修改 heroku 或您的 DNS 条目中的 DNS 选项。

        您需要根据到达您应用的 HTTP 请求的主机来使用您想要的数据库。看看Rails.application.routeshttps://apidock.com/rails/ActionController/AbstractRequest/request_uri 就可以了。阅读框架的请求路由。 (或将您的路由代码放在这里以获得更多帮助)

        【讨论】:

          【解决方案5】:

          更改公寓 gem 配置并将“www”添加到 exclude_domains 在config/initializers/apartment/subdomain_exclusions.rb:

          Apartment::Elevators::Subdomain.excluded_subdomains = ['www']
          

          【讨论】:

            猜你喜欢
            • 2018-05-28
            • 1970-01-01
            • 2015-03-12
            • 1970-01-01
            • 1970-01-01
            • 2011-02-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多