ActiveRecord.establish_connection跨请求的并发性

时间:2015-05-22 14:55:48

标签: ruby-on-rails-3 activerecord database-connection

使用Rails,这种方法是否容易导致单独的并发请求使用错误的连接/数据库?

def find_user

@user= User.find_by_email(email)

unless @user
  #search non_pro database
  User.establish_connection("#{Rails.env}_non_pro".to_sym)

 @user= User.find_by_email(email)
end

确保     User.establish_connection( “#{} Rails.env”。to_sym)   端

我想知道的是,如果第一个请求导致使用'non_pro'建立连接,第二个单独的请求是否会冒错误连接到'non_pro'的情况,如果它运行时第一个连接到'non_pro' “

1 个答案:

答案 0 :(得分:0)

我做了一个小测试,发现如果你做User.establish_connection(),这将为所有并发请求全局更改连接,因此使用错误的数据库可能会失败。

您可以做的是创建用户的子类

class NonProUser < User
    self.table_name = "users"
    establish_connection("#{Rails.env}_non_pro".to_sym)
end

然后,您可以使用NonProUser.find_by_email(email)在其他数据库中查找您的用户。