在二级子域使用www会忽略公寓中的第一级子域

时间:2017-06-15 12:38:36

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

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

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

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

  1. www.lkm.harabiz.com指向lkm.harabiz.com
  2. www.lkm.harabiz.com使用实际属于lkm的数据库表,而不是www
  3. 我正在使用Rails 5.0.0.1,该应用程序是通过Heroku部署的。

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

5 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:0)

只需将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

答案 2 :(得分:0)

您可以使用以下代码

从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

答案 3 :(得分:0)

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

您需要的是根据到达您的应用的HTTP请求的主机使用您想要的数据库。查看SELECT COALESCE(SUM(CASE WHEN _type = 'book' THEN 1 ELSE 0 END), 0) AS books_count, COALESCE(SUM(CASE WHEN _type = 'movie' THEN 1 ELSE 0 END), 0) AS movies_count FROM selected_media WHERE subscriber_id = $1 https://apidock.com/rails/ActionController/AbstractRequest/request_uri即可。阅读有关框架的请求路由。 (或在此处输入您的路由代码以获得更多帮助)

答案 4 :(得分:0)

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

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