簡體   English   中英

rails中的子域域管理

[英]Subdomain domain managment in rails

現在我有一個應用程序,其中包括許多東西,如狂歡,煉油廠,論壇和許多其他寶石。 所以我需要為用戶制作這個應用程序的克隆,並為每個應用程序創建一個子域。 比如user1.mydomain.com,它導致我的應用程序的克隆只有這個克隆的專用數據庫。 所以現在我剛剛復制並粘貼文件夾,但這是一個非常糟糕的做法,我遇到了很多問題。 所以我的問題是。 我該如何實現呢? 或許是我的麻煩的特殊寶石?

只有這個克隆的專用數據庫

這就是多租戶 - 真正的多租戶是您擁有多個數據庫的地方 - 每個用戶通過一個應用程序實例運行一個數據庫。

對於Rails來說,這是一個非常技術性的觀點,因為之前沒有這樣做過。

有一些寶石 - 比如Apartment - 它允許PGSQL范圍內的一些多租戶功能。 有一個關於這個Railscast 這里

在此輸入圖像描述

這僅適用於Postgres。 如果您正在使用MYSQL,則每次注冊新用戶時都必須創建一種加載,填充和引用各個表的方法。 不是一個平凡的壯舉。


為用戶制作此應用程序的克隆,並為每個應用程序創建一個子域

你沒有克隆應用程序; 您需要使用一個應用程序實例,然后將其與多數據孤島一起使用。

關於子域的另一個很棒的Railscast

在此輸入圖像描述

就子域而言,您必須構建流以處理不同的用戶實例:

#config/routes.rb
root "application#index"
constraints: Subdomain do
    resources :posts, path: "" #-> user1.domain.com/ -> posts#index
end


#lib/subdomain.rb
class Subdomain
   def matches?(request)
     @users.exists? request.subdomain #-> would have to use friendly_id
   end
end

#app/controllers/application_controller.rb
class ApplicationController < ApplicationController
   def index
       # "welcome" page for entire app
       # include logic to determine whether use logged in. If so, redirect to subdomain using route URL
   end
end

#app/controllers/posts_controller.rb
class PostsController < ApplicationController
   before_action :set_user #-> also have to authenticate here

   def index
      @posts = @user.posts
   end

   private 

   def set_user
      @user = User.find request.subdomain
   end
end

這將使您能夠擁有“歡迎”頁面,管理用戶登錄,然后有一個中央“用戶”區域,他們在子域中查看他們的帖子等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM