"With_connection" необходимо с "exec_query"? - PullRequest
0 голосов
/ 17 ноября 2018

Иногда я получаю PG::TRDeadlockDetected в Rails с приложением PostgreSQL (обслуживается через Passenger / Nginx) и прослеживаю его до тех мест в коде, которые используют ActiveRecord::Base.connection.exececute.

Чтобы это исправить, я заменяю .execute на .exec_query или .exec_update в соответствии с рекомендациями документации. Однако на самом деле неясно, получает ли ActiveRecord::Base.connection.exec_query соединение из пула соединений или нет.

  • При использовании ActiveRecord::Base.connection.exec_query в контроллере Rails нужно ли его оборачивать ActiveRecord::Base.connection_pool.with_connection? (мое предположение: да)
  • При использовании ActiveRecord::Base.connection.exec_query вне контекста запроса (скажем, задачи Rake, выполняемые как cronjob), должен ли он быть заключен в ActiveRecord::Base.connection_pool.with_connection? (мое предположение: да)

А если необходимо обертывание, есть ли более короткие альтернативы по сравнению с:

ActiveRecord::Base.connection_pool.with_connection do |connection|
  connection.exec_update "REINDEX INDEX my_complex_index"
end

(мое предположение: нет)

Спасибо за ваши подсказки!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...