ドメイン
まず、サブドメインに独自のカスタム ドメインを使用していることを確認する必要があります。
Heroku の標準xxx.herokuapp.com
では、その上に別のサブドメインを処理することはできません。したがって、基本的には最初からカスタム ドメインを使用する必要があります。
詳細については、このドキュメントを参照してください。
マルチテナンシー
schemas
私は PGSQL の経験はありませんが、マルチテナンシー全体の経験はあります。
ここには多くの優れたリソースがあります。
本質的には、表示/対話するのはテナントのみになるようにデータのスコープmulti-tenancy
を設定する方法にすぎません。DB の意味では、これを実現する 2 つの方法は、異なる DB を使用する (MYSQL の場合のように) か、スキーマを使用する (PGSQL のように) ことです。
問題を直接解決することはできませんが、いくつかのアイデアを提供できます。
モデル
特に MYSQL などでマルチテナンシーを実現する 1 つの方法は、モデルを使用して実現することです。
アクティブなレコードを持つレールで 2 つの異なるデータベースを操作するにはどうすればよいですか?
#lib/admin.rb
class Admin < ActiveRecord::Base
self.abstract_class = true
establish_connection "#{Rails.env}_admin"
end
#app/models/option.rb
Class Option < Admin
# do stuff
end
これは私たちにとって非常にうまく機能しますが、範囲指定されたアカウントではまだ機能していません. か何かにを設定することを考えていましたが@@class_variable
、Account
現在は取り組んでいません。
これはMYSQLを利用したデータベースでは非常にうまく機能しますが、アカウントごとにデータベースを作成する必要があり、PGSQLでは機能しません(私が知る限り)
PGSQL スキーマ
すべてのデータがまだ 1 つのデータベースに保存されているため、これは一種のチート方法だと思います。基本的には、さまざまな種類のデータを対象としているだけです。
ここでの問題は、真のマルチ テナンシーは、ユーザーのデータを完全に分離する必要があるため、必要に応じてアプリから完全に切り離すことができるということです。セキュリティとアクセスの観点から、これは最も柔軟でモジュラーな方法です。
Heroku の問題は、1 つのデータベースしか使用できないことです (AWS データベース インスタンスへのアクセス権を全員に付与します)。つまり、50 以上の無料データベースを作成することはできません (うまく機能しません)。
もちろん、独自のスタックを使用して必要なデータベースを作成することもできますが、PGSQL に関してはschemas
、データ用に を作成し、次のようなものを使用Apartment
してそれを実現するだけです。
新しいテナントを作成するとき、PostgreSQL は他のデータベースとは少し異なる動作をします。PostgreSQL を使用している場合、Apartment はデフォルトで新しいスキーマを設定し、そこに移行します。これにより、パフォーマンスが向上し、完全な新しいデータベースを作成できない Heroku などのシステムで Apartment を使用できるようになります。