Railsアプリでソファレストモデルを使用してマルチテナンシーを実装する方法に関する推奨事項を探しています。私のマルチテナント アプリでは、次の 2 つのオプションを考えています。
{編集 - 将来の読者を混乱させるだけなので、私の醜いオプションを削除しました}
これが 10,000 人のユーザーでうまく機能することを望みます。
解決策: サムのアドバイスに基づいて、これが私が行ったことであり、うまく機能しています。私の場合、プロキシ データベースの標準的な名前付けが私の名前付けと一致しなかったため、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