Предполагая значения по умолчанию, все ваши модели должны наследоваться от ActiveRecord::Base
, поэтому ActiveRecord::Base.connection.execute
и ваши connection.execute(...)
методы должны быть точно такими же (за исключением случаев, когда вы вызываете супер методы).
Теперь, ваш execute_sql
метод выглядит немного иначе, чем он принимает аргумент *sql_array
(который является массивом), что означает, что синтаксис немного отличается от ActiveRecord::Base.connection.execute
, потому что теперь вы можете предоставлять sanitized аргументы в SQL: т.е. User.execute_sql('SELECT * FROM users WHERE created_at > ?, Time.zone.now)
.
Rails использует ConnectionPool . Таким образом, каждый HTTP-запрос будет пытаться получить от Connection
в этом пуле, и когда он будет завершен, Соединение не будет закрыто, а будет просто возвращено в этот пул. Rails не будет бесконечно пытаться открывать соединения с течением времени. Укажите :pool
размер в database.yml
в соответствии с вашими производственными потребностями и пределами соединений с БД. Размер :pool
- это максимальное количество подключений, а не количество подключений; Rails не создает соединения сразу; только по требованию.
Однако, если вы намеренно не собираетесь больше использовать Connection
в течение потока / запроса, и вы хотите немедленно вернуть Connection
в пул, тогда вы можете просто сделать ActiveRecord::Base.connection_pool.release_connection