现在我有一个应用程序,其中包括许多东西,如狂欢,炼油厂,论坛和许多其他宝石。所以我需要为用户制作这个应用程序的克隆,并为每个应用程序创建一个子域。比如user1.mydomain.com,它导致我的应用程序的克隆只有这个克隆的专用数据库。所以现在我刚刚复制并粘贴文件夹,但这是一个非常糟糕的做法,我遇到了很多问题。所以我的问题是。我该如何实现呢?或许是我的麻烦的特殊宝石?
答案 0 :(得分:1)
仅针对此克隆的专用数据库
这称为multi tenancy - true 多租户是您拥有多个数据库的地方 - 每个用户通过一个应用程序实例运行一个数据库。
对于Rails来说,这是一个非常技术性的观点,因为它之前没有完成。
有一些宝石 - 例如Apartment
- 允许使用PGSQL scoping的一些多租户功能。有一个关于这个here的Railscast:
这仅适用于Postgres。如果您正在使用MYSQL,则必须创建一种加载,填充和放置的方法。每次注册新用户时都会引用各个表。不是一个平凡的壮举。
为用户制作此应用的副本,并为每个
创建一个子域
您不是制作应用的克隆;您需要使用一个应用程序实例,然后将其与多数据孤岛一起使用。
还有一个很棒的Railscast about the subdomains here:
就子域名而言,您必须构建流程来处理不同的用户实例:
#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
这将使您能够有一个欢迎&#34;页面,管理用户登录,然后有一个中央用户&#34;他们在子域内看到他们的帖子等的区域。