我有几个客户使用的 Rails 应用程序。每个客户端都通过一个域访问,但所有域都使用相同的 rails 应用程序:
my-client-1.mycompany.com
my-client-2.mycompany.com
my-client-n.mycompany.com
该应用程序使用多个数据库,每个客户端一个数据库。所有数据库都具有相同的结构,它们是相同的。我在 database.yml 中的每个数据库都有一个配置:
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
现在我有接下来的两个问题:
- ¿ 这是解决这个问题的正确方法吗?
- ¿ 如果一个用户正在处理某事并且需要 60 秒,并且在那一刻另一个用户通过其他域进入并由于上面的代码更改连接会发生什么。它是否会影响第一个购买更改其连接的用户,并且在某些时候需要 60 秒的过程会读取或写入错误的数据库?
谢谢