У меня есть приложение Ruby on Rails, где пользователи подключаются к базе данных, отличной от той, которая установлена в config / database.yml.Возможные подключения к базе данных хранятся в таблице в базе данных.Соединение с базой данных устанавливается для каждого запроса путем вызова establish_connection(connection_config)
для модели ActiveRecord
. Я попытался сделать что-то подобное с Sequel, используя следующий код
def self.establish_sequel_connection group
found = Sequel::DATABASES.find { |db| database_equal_group? db, group }
found || connect_to_group(group)
end
def self.connect_to_group(group)
db = Sequel.connect(
adapter: 'postgres', host: group['host'], database: group['database'],
user: group['username'], password: group['password']
)
if Rails.env.development?
db.sql_log_level = :info
db.loggers.push(Logger.new($stdout))
end
db
end
def self.database_equal_group?(db, group)
db[:host] == group[:host] && db[:database] == group[:database]
end
Когда я использовал Sequel.connectНесколько раз я наблюдал за несколькими базами данных. Я наблюдал за созданием нескольких соединений в PgAdmin 4. Когда я использовал в консоли Install_sequel_connection, казалось, что создается только одно соединение.Через некоторое время после запуска в работу сервер БД был перегружен из-за слишком большого количества соединений.Что могло вызвать несколько подключений к одной и той же базе данных, если Sequel :: DATABASES является константой?Это проблема многопоточности, так как установившаяся_связь вызывается несколькими запросами одновременно?