2017-05-01 16 views
0

我正在尋找解決問題的最佳方法。Rails,處理具有不同網址和設計但具有相同分區的兩個站點

在這一刻我有一個網站的客戶,example.domain.com

我的客戶要求,以創建具有設計一些改變另一個網站,但內容相同的第一個網站。我不想複製網站,因爲我添加到網站A的每個功能都必須部署到網站B,而且我正在尋找處理這種情況的巧妙方法。

我需要保留兩個不同的域,我還需要在控制器(也許在某些模型)中定製郵件程序和其他小的調整。

我的想法是把應用控制器的過濾器之前,像這樣

before_action:detect_domain

私人

def detect_domain 
    case request.env['HTTP_HOST'] 
    when "example.domain.com" 
    request.variant = :host1 
    when "example1.domain.com" 
    request.variant = :host2 
    end 
end 

然後我用變異與一些條件來選擇郵件,以自定義視圖並應用一些代碼更改。

還有其他想法嗎?

回答

1

使用之前的過濾器和每個請求的變量,如您的提案將工作,有幾個警告,我會在下面提到。我會推薦一個像request_store gem這樣的工具來實際存儲選擇了「皮膚」的每個請求值。

現在,爲注意事項。首先,每個請求變量的主要問題是您的Rails應用程序並不總是存在於請求的上下文中。後臺作業和控制檯會話在您的應用程序的通常請求/響應流程之外運行。您將需要考慮在未設置該變量時執行模型或其他非控制器/視圖代碼時會發生什麼情況。我建議根本不要讓你的模型依賴RequestStore - 如果需要,控制器可以將任何特定於請求的信息傳遞給模型。其次,從描述中不清楚你是否想要在兩個域之間進行任何數據或邏輯分離,或者你只是想要不同的外觀和感覺。如果前者,你可能會考慮apartment寶石,它旨在使數據庫多租戶更容易。

編輯:我也想提一提的是,作爲替代多租戶以上解決方案,你也有一個多實例解決方案的選擇。其中,您使用環境變量來指示應顯示哪個版本的站點,並啓動應用的多個實例(或者在具有反向代理的同一服務器上,或者在具有單獨的DNS條目或反向代理的單獨服務器上) 。缺點是增加了基礎架構成本,但上面提到的上下文問題已不再存在(所有內容都可以訪問環境變量)。

相關問題