3

複数の顧客が使用する 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. この問題を解決する正しい方法はありますか?
  2. 1 人のユーザーが何かを処理していて 60 秒かかり、その瞬間に別のユーザーが他のドメインから入り、上記のコードが原因で接続を変更した場合はどうなるでしょうか。最初のユーザーが接続を変更することに影響し、ある時点で 60 秒かかるプロセスが間違ったデータベースの読み取りまたは書き込みに影響しますか?

ありがとう

4

0 に答える 0