Ruby on rails rails中的子域管理

Ruby on rails rails中的子域管理,ruby-on-rails,ruby,ruby-on-rails-4,routing,subdomain,Ruby On Rails,Ruby,Ruby On Rails 4,Routing,Subdomain,现在我有一个应用程序,其中包括像狂欢,炼油厂,论坛和其他宝石很多东西。因此,我需要为用户克隆此应用程序,并为每个用户创建一个子域。类似于user1.mydomain.com,它导致我的应用程序的克隆,并且只针对该克隆使用专用数据库。所以现在我只是复制和粘贴文件夹,但这是一个非常非常糟糕的做法,我遇到了很多问题。所以我的问题是。我如何实现这一点?或者是为我的麻烦准备的特殊宝石 仅使用此克隆的专用数据库 这就是所谓的“真正的多租户”(true Multitenance)是指您拥有多个数据库,每个用户

现在我有一个应用程序,其中包括像狂欢,炼油厂,论坛和其他宝石很多东西。因此,我需要为用户克隆此应用程序,并为每个用户创建一个子域。类似于user1.mydomain.com,它导致我的应用程序的克隆,并且只针对该克隆使用专用数据库。所以现在我只是复制和粘贴文件夹,但这是一个非常非常糟糕的做法,我遇到了很多问题。所以我的问题是。我如何实现这一点?或者是为我的麻烦准备的特殊宝石

仅使用此克隆的专用数据库

这就是所谓的“真正的多租户”(true Multitenance)是指您拥有多个数据库,每个用户通过一个应用程序实例运行一个数据库

对于Rails来说,这是一个非常技术性的问题,因为以前没有这样做过

有一些gem(比如)允许使用多租户功能。关于这一点,有一位铁路专家:

这只适用于博士后。如果您使用的是MYSQL,那么每次注册新用户时都必须创建一种加载、填充和引用单个表的方法。这不是一个卑鄙的壮举


为用户克隆此应用程序,并为每个用户创建子域

你不是在克隆应用程序;您需要使用一个应用程序实例,然后将其用于多数据仓库

还有一个很好的例子:

就子域而言,您必须构造流来处理不同的用户实例:

#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
#config/routes.rb
根“应用程序#索引”
约束:子域do
资源:帖子,路径:“#->user1.domain.com/->帖子#索引
结束
#lib/subdomain.rb
类子域
def匹配?(请求)
@用户存在吗?request.subdomain#->必须使用友好的#id
结束
结束
#app/controllers/application_controller.rb
类ApplicationController也必须在此处进行身份验证
def索引
@posts=@user.posts
结束
私有的
def set_用户
@user=user.find request.subdomain
结束
结束
这将使您能够拥有一个“欢迎”页面,管理用户登录,然后拥有一个中心“用户”区域,让他们在其子域中查看自己的帖子等