我正在寻找有关如何在 Rails 应用程序中使用沙发模型实现多租户的建议。对于我的多租户应用程序,我正在考虑两种选择:
{ 编辑 - 删除了我丑陋的选项,因为它们只会让未来的读者感到困惑}
我希望它能够与 10K 用户一起工作。
解决方案:根据 Sam 的建议,这就是我所做的并且运行良好 - 就我而言,我需要覆盖 proxy_database 方法,因为代理数据库的标准命名与我的命名不匹配。
创造了主人
class Site < CouchRest::Model::Base
property :name
property :slug
proxy_for :users
proxy_for ...(all the other multi-tenant models)
# Databases are on same server in this example
def proxy_database
@db ||= self.server.database!(slug)
end
end
然后在每个多租户模型中
class User < CouchRest::Model::Base
...
proxied_by :site
在 ApplicationHelper 中创建一个可以在所有控制器中重用的“站点”方法。
module ApplicationHelper
def site
db_name = current_user.db_name
@site ||= Site.create(slug: "#{db_name}_#{Rails.env}" )
end
然后控制器可能会执行以下操作:
def show
user = site.users.find(params[:id])
render :json => user
end