2015-05-22 4 views
2

Использование Rails, этот подход уязвим для того, чтобы отдельные параллельные запросы использовали неправильное соединение/базу данных?ActiveRecord.establish_connection параллелизм по запросам

Защиту 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»

ответ

0

Я сделал небольшой тест и выяснил, что если выdo User.establish_connection() это изменит соединение глобально для всех одновременных запросов, поэтому они могут выйти из строя, используя неправильную базу данных.

Что вы можете сделать, это сделать подкласс пользователя

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

Затем вы можете использовать NonProUser.find_by_email(email) найти своего пользователя на другой базе данных.

Смежные вопросы