複数の顧客が使用する Rails アプリケーションがあります。各クライアントはドメイン経由でアクセスしますが、すべてのドメインは同じ rails アプリで動作します。
my-client-1.mycompany.com
my-client-2.mycompany.com
my-client-n.mycompany.com
アプリケーションは、複数のデータベース (クライアントごとに 1 つのデータベース) で動作します。すべてのデータベースは同じ構造を持ち、同一です。database.yml にデータベースごとに 1 つの構成があります。
my-client-1:
adapter:
username:
my-client-2:
adapter:
username:
...
あるユーザーが使用するドメインに基づいて、対応するデータベースを変更する必要があることをアプリに示す必要があります。たとえば、ユーザーが my-client-2.mycompany.com から入力した場合、使用するデータベースは my-client2 である必要があります。
私は自分の application_controller.rb にこのコードを含めることでそれを行いました:
before_filter :set_db_connection
def set_db_connection
d = request.host.split('.')
current_domain = d[0]
ActiveRecord::Base.establish_connection current_domain
end
ここで、次の 2 つの質問があります。
- この問題を解決する正しい方法はありますか?
- 1 人のユーザーが何かを処理していて 60 秒かかり、その瞬間に別のユーザーが他のドメインから入り、上記のコードが原因で接続を変更した場合はどうなるでしょうか。最初のユーザーが接続を変更することに影響し、ある時点で 60 秒かかるプロセスが間違ったデータベースの読み取りまたは書き込みに影響しますか?
ありがとう