2017-06-15 20 views
0

我有這樣的子域:lks.harabiz.com & lkm.harabiz.com,每個都有自己的數據庫表。在二層使用www子域忽略公寓中的一級子域

當有人嘗試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的東西,再加上應用層面的東西,但我無法達到預期的效果。

回答

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 
+0

它的工作原理。但是有沒有一種方法可以完全去除二級子域? –

+0

此外,如果子域名爲「www」,則此自定義電梯不起作用。 –

+0

如果你想重定向'www.lkm.harabiz.com'到'lkm.harabiz.com',您可以通過DNS或nginx的/ Apache的配置做到這一點。 – wesley6j

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文件陷阱

0

使用這些不同表格的方式是特定於應用程序的,因此您不應該添加任何DNS交互代碼,因爲它會使您的代碼變得脆弱並且不便於攜帶,也不會修改heroku或DNS條目中的DNS選項。

你需要的是讓使用基於到達您的應用程序的HTTP請求的主機上您所需的數據庫。看看Rails.application.routeshttps://apidock.com/rails/ActionController/AbstractRequest/request_uri來做到這一點。閱讀關於您的框架的請求路由。 (或把這裏你的路由代碼,以獲得更多的幫助)